R 创建一列中没有重复项但其他列中可能有重复项的数据帧
当我的数据框在两列上都包含重复项时,我在创建矩阵时遇到问题 范例 但使用df,我需要创建如下内容: 新数据帧(NDF) 如您所见,我只使用了数据帧df上n列中的唯一值,行中填充了df$s中的值,本例中的最新值可以是零或na(现在为空)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软件包中的
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