我的数据框由以下列组成:A_NUMBER, B_NUMBER, DURATION
。我想计算A_NUMBER
次呼叫不同B_NUMBER
的次数(看看他们的网络有多大)。
我首先创建了一个新列,所有值都设置为0。
df$CFU <- rep (0,nrow(df))
接下来,我尝试了以下for循环:
for (j in 1:nrow(df)){ for (i in 1:nrow(unique(df$B_NUMBER))){
if(df$A_NUMBER[i] == df$A_NUMBER[j]) {df$CFU[j] <- sum(df$CFU[j],1) }}}
然后我收到以下错误:
1:nrow中的'错误(唯一(df $ B_NUMBER)):长度为0的参数。
我该如何解决这个问题?
答案 0 :(得分:0)
由于您未提供示例数据,因此很难进一步检查for循环的内容。但根据错误消息,很明显1:nrow(unique(df$B_NUMBER))
无效。函数unique
返回vector
,它是一维的。如果您将此vector
作为nrow
的输入,则会返回NULL
。在这种情况下,您需要的是length
,而不是nrow
。
顺便说一下,df$CFU <- rep(0, nrow(df))
可以简化为df$CFU <- 0
答案 1 :(得分:0)
我理解您的问题的方式是,您正在寻找的是每个A_NUMBER的唯一B_NUMBER列表。
A_NUMBER = round(runif(100,0,10))
B_NUMBER = round(runif(100,0,10))
df = cbind(A_NUMBER, B_NUMBER)
aggregate(B_NUMBER ~ A_NUMBER, data=df, unique)
A_NUMBER B_NUMBER
1 0 10, 8
2 1 9, 3, 1, 7, 8, 0
3 2 7, 0, 6, 1, 9, 2, 10
4 3 7, 3, 6, 8, 4, 5
5 4 7, 9, 3, 10, 4, 8, 1, 2, 5
6 5 6, 5, 2, 8
7 6 4, 8, 9, 6, 10, 3
8 7 7, 3, 6, 0, 4, 1, 9, 8
9 8 7, 9, 8, 5, 2
10 9 8, 6, 2, 9, 0, 4, 1
11 10 7
然后你可以将矢量的长度称为
aggregate(B_NUMBER ~ A_NUMBER, data=df, function(x) length(unique(x))
A_NUMBER B_NUMBER
1 0 2
2 1 6
3 2 7
4 3 6
5 4 9
6 5 4
7 6 6
8 7 8
9 8 5
10 9 7
11 10 1
并通过
检查是否正确subset(df,A_NUMBER == 8)
A_NUMBER B_NUMBER
[1,] 8 7
[2,] 8 9
[3,] 8 7
[4,] 8 8
[5,] 8 5
[6,] 8 7
[7,] 8 2
[8,] 8 2
[9,] 8 8
看起来不错,只有7s,9s,8s,5s和2s!