【问题标题】:Create new columns to display repeating values based on combinations from other columns创建新列以显示基于其他列组合的重复值
【发布时间】:2019-06-11 00:04:20
【问题描述】:

我正在尝试编写一个 R 脚本,该脚本将根据位于几个不同列中的值和一个 ID 字段创建新列,然后使用基于值字段的重复值填充这些列。这是起始数据框的样子:

    df
   ID   row1   row2
1   1      x   <NA>
2   1   <NA>   <NA>
3   1   <NA>      y
4   2   <NA>      x
5   2      y   <NA>
6   3   <NA>      x
7   3   <NA>   <NA>
8   3   <NA>   <NA>
9   3      x   <NA>
10  4   <NA>      x

这是我希望创造的:

df
   ID   row1   row2   x1   y1   x2   y2   x3 y3   x4 
1   1      x   <NA>    x <NA> <NA> <NA> <NA> NA <NA> 
2   1   <NA>   <NA>    x <NA> <NA> <NA> <NA> NA <NA> 
3   1   <NA>      y    x    y <NA> <NA> <NA> NA <NA> 
4   2   <NA>      x <NA> <NA>    x <NA> <NA> NA <NA> 
5   2      y   <NA> <NA> <NA>    x    y <NA> NA <NA> 
6   3   <NA>      x <NA> <NA> <NA> <NA>    x NA <NA> 
7   3   <NA>   <NA> <NA> <NA> <NA> <NA>    x NA <NA> 
8   3   <NA>   <NA> <NA> <NA> <NA> <NA>    x NA <NA> 
9   3      x   <NA> <NA> <NA> <NA> <NA>    x NA <NA> 
10  4   <NA>      x <NA> <NA> <NA> <NA> <NA> NA    x 
> 

我已经能够根据存在的每个值-ID 组合自动创建空列。没有任何值会占据它们的值对组合不需要创建列,在本示例中,这将是列假设 y4。我尝试在 for 循环中使用嵌套的 if 语句来自动化,但我无法让值在必要时重复。关于如何在 ID 字段与列匹配时从上面复制数据框的值的任何想法?

【问题讨论】:

  • 我不认为这是一个好主意,创建无限量的填充了非常值的空列-您的数据大小会爆炸得非常快。你为什么需要这样的东西?增加 2 列来跟踪 yx 的位置不是更好吗?
  • 这个想法是根据每个 ID 值组合创建一个唯一列,因为我正在处理的数据在不同的 ID 中有多个关联的值,我试图将这些函数与它们的特定路径匹配他们在数据框中的位置。实际上,使用我的方法只创建了 15 个额外的列。

标签: r


【解决方案1】:

这是一种可以产生预期输出的方法,不同之处在于它只显示数据集中实际存在的值-ID 组合(例如,保留 y3 列,全部为 NA

df1 = data.frame(ID = df$ID, val = coalesce(df$row1,df$row2))

df1 %>% unite(comb, ID, val) %>% 
        mutate(val = df1$val, rn = row_number()) %>% 
        spread(comb,val) %>% mutate(ID = df$ID, row1 = df$row1, row2 = df$row2) %>% 
        group_by(ID) %>% fill(everything()) %>% 
        select(-rn) %>% select(-contains("NA"))

A grouped_df: 10 × 9
1_x 1_y 2_x 2_y 3_x 4_x ID  row1  row2
x   NA  NA  NA  NA  NA  1   x     NA
x   NA  NA  NA  NA  NA  1   x     NA
x   y   NA  NA  NA  NA  1   x     y
NA  NA  x   NA  NA  NA  2   NA    x
NA  NA  x   y   NA  NA  2   y     x
NA  NA  NA  NA  x   NA  3   NA    x
NA  NA  NA  NA  x   NA  3   NA    x
NA  NA  NA  NA  x   NA  3   NA    x
NA  NA  NA  NA  x   NA  3   x     x
NA  NA  NA  NA  NA  x   4   NA    x

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 2019-09-18
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多