如何根据另一列中的值填充列?

时间:2019-08-16 09:01:05

标签: r loops dataframe

我有一个很大的数据框,其中包含来自其他表的键的交叉表。与其让key1的多个实例与不同的key2值耦合,我不希望每个key1都有一行,并带有几列。

我尝试使用for循环执行此操作,但无法使其正常工作。

这是一个例子。我有一个结构为df1的数据框,我希望它具有df2的结构。

df1 <- data.frame(c("a", "a", "a", "b", "b", "c", "c", "c", "c", "c", "d"),c(1, 2, 3, 2, 3, 1, 2, 3, 4, 5, 9))
names(df1) <- c("key1", "key2")


df2 <- data.frame(c("a", "b", "c", "d"), c(1, 2, 1, 9), c(2, 3, 2, NA), c(3, NA, 3, NA), c(NA, NA, 4, NA), c(NA, NA, 5, NA))
names(df2) <- c("key1", "key2_1", "key2_2", "key2_3", "key2_4", "key2_5")

我怀疑这可以通过使用Apply的方法来实现,但是我还没有找到方法。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

library(dplyr)
library(tidyr)

df1 %>% 
  group_by(key1) %>% 
  mutate(var = paste0("key2_", seq(n()))) %>% 
  spread(var, key2)

# # A tibble: 4 x 6
# # Groups:   key1 [4]
#     key1  key2_1 key2_2 key2_3 key2_4 key2_5
#     <fct>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
#   1 a          1      2      3     NA     NA
#   2 b          2      3     NA     NA     NA
#   3 c          1      2      3      4      5
#   4 d          9     NA     NA     NA     NA