1

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

问题:

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

>input

> [[1]]
>> [1] "foo" "bar" "norf"
> [[2]]
>> [1] "norf"
> [[3]]
>> NA
.....
> [[200]]
>> [1] "hello" "norf"

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

possible_strings <- c("foo","bar","hello",...)

我想将其转换为以下格式的数据框(或完成工作的类似对象):

> 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

我非常广泛地尝试对其进行转换,我得到的最远的是一个数据框,其中包含所有可能的字符串作为列名,所有行中都有字符串,并填充有 NA(我在此过程中使用了 rbind.fill)。

任何帮助将不胜感激,

谢谢!

4

1 回答 1

2

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

sapply()使用和可以很容易地做到这一点%in%sapply()一次遍历列表一个元素并将函数%in%应用于每个元素,查找元素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
于 2014-06-07T02:03:24.240 回答