Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据另一列中的值填充列?_R_Loops_Dataframe - Fatal编程技术网

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

R 如何根据另一列中的值填充列?,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) <-

我有一个大数据框,其中包含来自其他表的键的交叉表。我希望每个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) <- 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")
df1
library(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