我的数据框df1
包含5列c1
,c2
,c3
,c4
和c5
:
df1 <- data.frame(c1 = c(1, 0, 1), c2 = c(0, 0, 1), c3 = c(2, 1, 0), c4 = c(1, 4, 3), c5 = c(1, 0, 0))
#df1
c1 c2 c3 c4 c5
1 0 2 1 1
0 0 1 4 0
1 1 0 3 0
我想要的输出是:
1 3 3 4 5
3 4 4 4 4
1 2 4 4 4
基本上,我根据列号及其值(值始终小于或等于5)创建矩阵。例如,df1
中的第2行有1
,4
属于列c3
和c4
。因此,所需矩阵中的第2行将为3 4 4 4 4
。
我自己尝试过。我的代码涉及多个嵌套控制流,并且不适用于大型数据框。
答案 0 :(得分:2)
一点PS C:\> Get-ImmediateInvocationString -myArg $myVariable; $lol = ""; Write-Host $lol
lol
魔法:
apply
答案 1 :(得分:1)
这是一个稍微不同的选项
t(apply(df1, 1, FUN = function(x) rep(which(x!=0), x[x!=0])))
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 3 3 4 5
#[2,] 3 4 4 4 4
#[3,] 1 2 4 4 4