R 如何根据另一列中的值填充列?
我有一个大数据框,其中包含来自其他表的键的交叉表。我希望每个key1有一行,而不是有多个key1实例和不同的key2值 我试着用for循环来做这件事,但它无法让它工作 这里有一个例子。我有一个结构为df1的数据帧,我希望它的结构为df2R 如何根据另一列中的值填充列?,r,loops,dataframe,R,Loops,Dataframe,我有一个大数据框,其中包含来自其他表的键的交叉表。我希望每个key1有一行,而不是有多个key1实例和不同的key2值 我试着用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) <-
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")
df1library(dplyr)
图书馆(tidyr)
df1%>%
分组依据(键1)%>%
突变(var=paste0(“键2”),seq(n()))%>%
价差(变量,键2)
##tibble:4 x 6
##组:键1[4]
#键1键2_1键2_2键2_3键2_4键2_5
#
#1 a 12 3 NA NA
#2b23na-NA-NA
#3 c 1 2 3 4 5
#4d9na-NA-NA
使用dplyr
和tidyr
,您可以执行df1%>%groupby(key1)%%>%mutate(rn=row\u number())%%>%spread(rn,key2)
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