我确实有一个问题,我无法独自解决。对不起我是新手,我已经尝试了很多不同的东西。 我有一个包含23个参与者和40个变量的数据框。我想生成一个新的文本文件,说明每个参与者都缺少WHICH变量。我做的是:
miss_val=vector(mode='list',length=num_participants)
for ( i in 1:num_participants){
miss_val[i]=sum(is.na(data[i,]))
}
给出了每个参与者缺失值的总和。现在我想为每个参与者生成一个句子,指定缺少哪些变量。我使用which(is.na(data[i,])
只给了我不同缺失值的位置 - 我怎样才能得到这些名字?我也尝试过:colnames( which( is.na (data[i,])
它也不起作用。
答案 0 :(得分:0)
没有提供数据,但您可以尝试这样做:
apply(dat, 1, function(x) { list(names(x)[ is.na(x) ] } )
结果不是数据帧,而是一个列表,其第n个条目的字符值是按行丢失元素的列名。
> dat <- data.frame( x=c(NA, 1:4),y=c("a",NA,"b","c","d"), z=c( NA, 1:3,NA))
> apply(dat, 1, function(x) { list(names(x)[ is.na(x) ]) } )[[1]]
[[1]]
[1] "x" "z"
> apply(dat, 1, function(x) { list(names(x)[ is.na(x) ]) } )
[[1]]
[[1]][[1]]
[1] "x" "z"
[[2]]
[[2]][[1]]
[1] "y"
[[3]]
[[3]][[1]]
character(0)
[[4]]
[[4]][[1]]
character(0)
[[5]]
[[5]][[1]]
[1] "z"
我想人们也可能会在列名称上考虑sapply
或lapply
,然后cbind()
- do.call
编辑。这就是我想出的:
do.call(cbind, lapply(names(dat) , function (x) c(NA,x)[ 1+is.na(dat[[x]]) ] ))
[,1] [,2] [,3]
[1,] "x" NA "z"
[2,] NA "y" NA
[3,] NA NA NA
[4,] NA NA NA
[5,] NA NA "z"
需要在is.na的结果中添加1,逐列应用以创建索引以选择列名称或NA。
答案 1 :(得分:0)
如果不了解数据的外观,就很难评估。但是,您可以尝试使用sapply()函数。此函数可以循环遍历数据框中的变量并返回列表对象,该列表对象在存储的内容方面非常灵活。这是一个可能适合您的场景的示例:
# construct silly data.frame
temp <- data.frame("a"=1:10, "aa"=rep(1:5, 2), "b"=rnorm(10),
"c"=sample(c("good", "bad", "ugly"), 10, replace=TRUE))
# build in some missing values
temp$a[c(1,5)] <- NA
temp$b[c(3,7, 9)] <- NA
temp$c[c(2,5)] <- NA
# take a peek at the data
temp
# construct empty list to store names of missing vars
missingVars <- list()
# loop through observations
for(i in 1:nrow(temp)) {
# subset to one row data set
obs.row <- temp[i,]
# fill in missing var list with names of variables that are missing
missingVars[[paste0("obs.",i)]] <-
names(obs.row)[unlist(sapply(obs.row, is.na))]
}
根据您所描述的内容,这应该可行。然后,您可以使用行号提取缺失变量的名称:
missingVars[[1]]
或使用list元素的名称:
missingVars[["obs.1"]]
将为第一次观察提取缺失变量的名称。
答案 2 :(得分:0)
假设数据如下:
setInterval(function(){
var pack = {
player:Player.update(),
platform:Platform.update()
}
for (var i in SOCKET_LIST) {
var socket = SOCKET_LIST[i];
io.sockets.in(socket.room).emit('newPositions', pack);
}
}, 30);
我是当前参与者检查丢失的变量:
particpant var1 var2
1 1 0.74261292 0.2699047
2 2 0.08523502 -0.2588741
3 3 NA 1.3995776
4 4 0.12567631 0.8855174
5 5 0.44244614 -0.3241024
您可以按以下方式使用colnames来获取NA的列名称。注意colnames的用法。参数是整个数据集,然后我们使用哪个函数的返回值索引到向量:
i <- 3
哪个会输出:
colnames(data)[which(is.na(data[i,]))]