Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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中将列表(strsplit输出)转换为逻辑数据帧(根据列名)_R_List_Boolean Logic_Strsplit - Fatal编程技术网

如何在R中将列表(strsplit输出)转换为逻辑数据帧(根据列名)

如何在R中将列表(strsplit输出)转换为逻辑数据帧(根据列名),r,list,boolean-logic,strsplit,R,List,Boolean Logic,Strsplit,这是我的第一篇文章,显然,我没有编程经验 问题: 我有一个200个字符向量的列表,每个从0到7个元素不等:(这个列表是strsplit函数的输出) 我还有一个输入中所有潜在字符串的字符串: possible_strings <- c("foo","bar","hello",...) 我尝试了非常广泛的转换,得到的最远的结果是一个数据帧,其中包含所有可能的字符串作为列名,所有行中都有字符串,并用NAs填充(我在过程中使用了rbind.fill) 任何帮助都将不胜感激 谢谢 在最初的问题中,

这是我的第一篇文章,显然,我没有编程经验

问题:

我有一个200个字符向量的列表,每个从0到7个元素不等:(这个列表是strsplit函数的输出)

我还有一个输入中所有潜在字符串的字符串:

possible_strings <- c("foo","bar","hello",...)
我尝试了非常广泛的转换,得到的最远的结果是一个数据帧,其中包含所有可能的字符串作为列名,所有行中都有字符串,并用NAs填充(我在过程中使用了rbind.fill)

任何帮助都将不胜感激


谢谢

在最初的问题中,您说希望结果是一个数据帧,但您显示的结果,
res
,实际上是一个矩阵。因此,我下面的第一个结果是一个矩阵,然后我使用
as.data.frame()
将其转换为数据帧

使用%中的
sapply()
%可以相当轻松地完成此操作
sapply()
一次只列出一个元素,并在每个元素上应用%
中的
%函数,查找
possStr
的元素并返回逻辑结果

> input <- list(c("foo", "bar", "norf"), "norf", NA, c("hello", "norf"))
> possStr <- c("foo", "bar", "norf", "hello")

> d <- t(sapply(input, function(x) possStr %in% x ))
> colnames(d) <- possStr 
> d                                       ## in matrix form
#        foo   bar  norf hello
# [1,]  TRUE  TRUE  TRUE FALSE
# [2,] FALSE FALSE  TRUE FALSE
# [3,] FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE  TRUE  TRUE

> as.data.frame(d)                        ## convert to data frame
#     foo   bar  norf hello
# 1  TRUE  TRUE  TRUE FALSE
# 2 FALSE FALSE  TRUE FALSE
# 3 FALSE FALSE FALSE FALSE
# 4 FALSE FALSE  TRUE  TRUE
>以矩阵形式输入possStr d colnames(d)d##
#foo bar norf你好
#[1,]对错
#[2,]假假假真假
#[3,]错
#[4]假假假真
>as.data.frame(d)##转换为数据帧
#foo bar norf你好
#1真假
#2假假真假
#3假假假假假
#4假假假真

您可以使用
as.data.frame
将生成的矩阵转换为data.frame,然后使用
names(df)设置名称谢谢,进行了编辑。但是期望的结果是矩阵形式的,所以我将把它作为一个矩阵,并添加名称谢谢您的超快速响应。我应该说得更清楚一点:输入[2][1]是possStr的一部分,这不仅对我很重要。同样重要的是,这会在其自身名称的列(此处为“norf”列)中产生正确的结果。但是,如果这里有另一个表达式,例如“hello”,那么在“hello”列中应该会出现一个TRUE,等等。我尝试了你的解决方案,事实上,它正是我想要的。非常感谢你的帮助!令人惊叹的。很高兴我能帮忙。顺便说一下,请记住,
NA
值从此结果中消失,除非您在possStr中搜索它们。不确定你是否需要它们。
> res
        foo   bar   norf  hello
[1,  ]  TRUE  TRUE  TRUE  FALSE
[2,  ]  FALSE FALSE TRUE  FALSE
[3,  ]  FALSE FALSE FALSE FALSE
[...]
[200,]  FALSE FALSE TRUE  TRUE
> input <- list(c("foo", "bar", "norf"), "norf", NA, c("hello", "norf"))
> possStr <- c("foo", "bar", "norf", "hello")

> d <- t(sapply(input, function(x) possStr %in% x ))
> colnames(d) <- possStr 
> d                                       ## in matrix form
#        foo   bar  norf hello
# [1,]  TRUE  TRUE  TRUE FALSE
# [2,] FALSE FALSE  TRUE FALSE
# [3,] FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE  TRUE  TRUE

> as.data.frame(d)                        ## convert to data frame
#     foo   bar  norf hello
# 1  TRUE  TRUE  TRUE FALSE
# 2 FALSE FALSE  TRUE FALSE
# 3 FALSE FALSE FALSE FALSE
# 4 FALSE FALSE  TRUE  TRUE