R 创建一列中没有重复项但其他列中可能有重复项的数据帧

R 创建一列中没有重复项但其他列中可能有重复项的数据帧,r,R,当我的数据框在两列上都包含重复项时,我在创建矩阵时遇到问题 范例 但使用df,我需要创建如下内容: 新数据帧(NDF) 如您所见,我只使用了数据帧df上n列中的唯一值,行中填充了df$s中的值,本例中的最新值可以是零或na(现在为空) F不清楚您想要什么,因为data.frame必须是矩形 也许你想要这个: tapply(s, n, list) #$A #[1] "aa" "dd" # #$B #[1] "bb" "aa" "cc" # #$C #[1] "cc" 您可以使用plyr软件包中的

当我的数据框在两列上都包含重复项时,我在创建矩阵时遇到问题 范例

但使用df,我需要创建如下内容: 新数据帧(NDF)

如您所见,我只使用了数据帧df上n列中的唯一值,行中填充了df$s中的值,本例中的最新值可以是零或na(现在为空)


F不清楚您想要什么,因为
data.frame
必须是矩形

也许你想要这个:

tapply(s, n, list)
#$A
#[1] "aa" "dd"
#
#$B
#[1] "bb" "aa" "cc"
#
#$C
#[1] "cc"

您可以使用
plyr
软件包中的
dcast
函数来获取以下数据帧:

dcast(data=df, n ~ s)
  n   aa   bb   cc   dd
1 A   aa <NA> <NA>   dd
2 B   aa   bb   cc <NA>
3 C <NA> <NA>   cc <NA>
dcast(数据=df,n~s)
n aa bb cc dd
1 A aa dd
2 B aa bb cc
3立方厘米
如果你想把所有非NA值放在“前面”,你需要做得更多。我找到了下面的解决方案,它一点也不漂亮,但很有效

x <- dcast(data=df, n ~ s)
t(apply(x ,1 ,function(x){
                          tmp <- sum(is.na(x))
                          c(x[complete.cases(x)], rep(NA,tmp))
                          }))
     [,1] [,2] [,3] [,4] [,5]
[1,] "A"  "aa" "dd" NA   NA  
[2,] "B"  "aa" "bb" "cc" NA  
[3,] "C"  "cc" NA   NA   NA  

x请澄清您的问题!
tapply(s, n, list)
#$A
#[1] "aa" "dd"
#
#$B
#[1] "bb" "aa" "cc"
#
#$C
#[1] "cc"
dcast(data=df, n ~ s)
  n   aa   bb   cc   dd
1 A   aa <NA> <NA>   dd
2 B   aa   bb   cc <NA>
3 C <NA> <NA>   cc <NA>
x <- dcast(data=df, n ~ s)
t(apply(x ,1 ,function(x){
                          tmp <- sum(is.na(x))
                          c(x[complete.cases(x)], rep(NA,tmp))
                          }))
     [,1] [,2] [,3] [,4] [,5]
[1,] "A"  "aa" "dd" NA   NA  
[2,] "B"  "aa" "bb" "cc" NA  
[3,] "C"  "cc" NA   NA   NA