Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何为数据帧中未找到的值获取NA_R_Dataframe - Fatal编程技术网

R 如何为数据帧中未找到的值获取NA

R 如何为数据帧中未找到的值获取NA,r,dataframe,R,Dataframe,我有一个值向量和一个dataframe,我可以使用以下命令在dataframe的特定列中找到向量的每个项: lapply(l, function(x) df[which(df$col1==x),col2]) 如何为数据帧中不可用的值获取NA 例如: df: col1 col2 1 a 1 b 2 c l=c(1,3) output: col1 col2 1 a,b 3

我有一个值向量和一个dataframe,我可以使用以下命令在dataframe的特定列中找到向量的每个项:

lapply(l, function(x) df[which(df$col1==x),col2])
如何为数据帧中不可用的值获取NA

例如:

df:   col1  col2
      1     a
      1     b
      2     c

l=c(1,3)

output:  col1   col2
         1      a,b
         3      NA

如果某事物不是整数(0)、字符(0)等,则该函数为TRUE。 (它们的共同点是长度为零):

non.zero.vec 0
任何具有这种零长度值元素的向量都可以使用

zero2na <- function(vec) sapply(vec, function(x) ifelse(non.zero.vec(x), x, NA))

## e.g.
zero2na(c(1, 2, integer(0)) ## [1] 1 2 NA

zero2na使用data.table您可以通过运行到
l
(您的向量)的二进制连接来有效地实现这一点

数据:

df <- structure(list(col1 = c(1L, 1L, 2L), col2 = c("a", "b", "c")), .Names = c("col1","col2"), class = "data.frame", row.names = c(NA, -3L))
l <- c(1, 3)
library(magrittr)
lapply(l, function(x){
    res<-df[[2]][df[[1]]==x] %>% paste(collapse=",")
    if(res=="") res = NA
    return(cbind(x,res))
    }) %>% do.call(rbind,.)
     x   res  
[1,] "1" "a,b"
[2,] "3" NA  

我不太清楚。发布一些输入和所需输出。请提供
l
df
对象的示例数据以及预期输出。当我使用unlist获取此函数的输出时,所有字符(0)值都将被删除。在对这些值使用unlist之后,我想得到NA。请提供。您可能来自Python。Python中的
列表和R中的
是不同的东西。在你的例子中,你有一个数值向量。而且,
list
是一种不好的调用方式,它非常简短(+1)!
df <- structure(list(col1 = c(1L, 1L, 2L), col2 = c("a", "b", "c")), .Names = c("col1","col2"), class = "data.frame", row.names = c(NA, -3L))
l <- c(1, 3)
library(magrittr)
lapply(l, function(x){
    res<-df[[2]][df[[1]]==x] %>% paste(collapse=",")
    if(res=="") res = NA
    return(cbind(x,res))
    }) %>% do.call(rbind,.)
     x   res  
[1,] "1" "a,b"
[2,] "3" NA