我正在分析一些实验的试验数据,我们给参与者提供了来自190对的60对听觉刺激,以4分制进行评分。我得到了很多缺失值,因为参与者每次都评定不同的对。
我真的不关心哪个参与者说了什么,我只需要同一对的所有等级都在同一行中,这样我就可以执行Light的Kappa测试,以获得n对中每对的评估者协议kappam.light(irr package)。
这是15个参与者的数据头,其中n是对的编号,m是参与者:
> head(my.data)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
1 NA 1 NA 1 NA NA NA NA 2 2 NA NA NA 3 NA
2 NA 3 NA NA 3 NA NA NA 3 3 NA NA 4 NA 3
3 NA NA 1 NA NA 4 NA 1 NA NA 1 3 NA NA 3
4 NA NA 2 NA 1 NA NA 1 NA NA NA NA NA NA NA
5 1 NA NA 1 NA NA NA 1 NA NA 4 1 NA NA NA
6 2 NA NA NA 1 NA NA NA 1 3 NA NA NA 2 NA
我想要的输出(如果可能)如下:
[,1] [,2] [,3] [,4] [,5] [,6]
1 1 1 2 2 3
2 3 3 3 3 4 3
3 1 4 1 1 3 3
4 2 1 1
5 1 1 1 4 1
6 2 1 1 3 2
我不确定R是否允许在数据帧/矩阵中使用不同的行长度,但是尽可能地删除尽可能多的缺失值会很好,因此kappam.light不会忽略整个行。
答案 0 :(得分:4)
您可以轻松摆脱NA
中的list
值。另一方面,matrix
和data.frame
都需要具有恒定的行长度。这是一种方法:
# list removing NA's
lst <- apply(my.data, 1, function(x) x[!is.na(x)])
# maximum lenght
ll <- max(sapply(lst, length))
# combine
t(sapply(lst, function(x) c(x, rep(NA, ll-length(x)))))
答案 1 :(得分:3)
如果您不介意将所有NA列留在m2中,则可以省略第二行代码:
m2 <- t(apply(m, 1, function(x) x[order(is.na(x))])) # sort NAs to end of ea row
m2[, !!colSums(!is.na(m2))]
最后一行可以是:m2[, apply(m2, 2, function(x) any(!is.na(x)))]
结果是:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 2 2 3 NA
[2,] 3 3 3 3 4 3
[3,] 1 4 1 1 3 3
[4,] 2 1 1 NA NA NA
[5,] 1 1 1 4 1 NA
[6,] 2 1 1 3 2 NA
注意:我们将此作为输入m
:
m <-
structure(c(NA, NA, NA, NA, 1L, 2L, 1L, 3L, NA, NA, NA, NA, NA,
NA, 1L, 2L, NA, NA, 1L, NA, NA, NA, 1L, NA, NA, 3L, NA, 1L, NA,
1L, NA, NA, 4L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1L,
1L, 1L, NA, 2L, 3L, NA, NA, NA, 1L, 2L, 3L, NA, NA, NA, 3L, NA,
NA, 1L, NA, 4L, NA, NA, NA, 3L, NA, 1L, NA, NA, 4L, NA, NA, NA,
NA, 3L, NA, NA, NA, NA, 2L, NA, 3L, 3L, NA, NA, NA), .Dim = c(6L,
15L), .Dimnames = list(NULL, NULL))
下次请使用dput
在此表单中提供您的数据。
答案 2 :(得分:2)
这样的事情会起作用吗?
# initialize empty data frame
datt <- data.frame()
library(plyr)
for(i in 1:nrow(my.data)){
myd <- my.data[i, ]
myd <- myd[, !is.na(myd)]
names(myd) <- 1:length(myd)
datt <- rbind.fill(datt, myd)
}
datt
1 2 3 4 5 6
1 1 1 2 2 3 NA
2 3 3 3 3 4 3
3 1 4 1 1 3 3
4 2 1 1 NA NA NA
5 1 1 1 4 1 NA
6 2 1 1 3 2 NA