Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 如何将字符向量列表转换为单个向量?_R_Stringr - Fatal编程技术网

R 如何将字符向量列表转换为单个向量?

R 如何将字符向量列表转换为单个向量?,r,stringr,R,Stringr,谢谢你抽出时间 我正在执行一些数据处理,并从stringr包中使用str\u extract\u all从列中提取一些数据。我的str\u extract\u all调用使用了一些正则表达式逻辑来提取适当的信息 但是,str\u extract\u all返回一个列表。我需要将这个列表转换为一个向量,这样我就可以将这个向量作为一个新列包含到我的数据帧中 下面是一个可复制的示例。这是我通过str\u extract\u all返回的列表: example_list <- list("[10]

谢谢你抽出时间

我正在执行一些数据处理,并从
stringr
包中使用
str\u extract\u all
从列中提取一些数据。我的
str\u extract\u all
调用使用了一些正则表达式逻辑来提取适当的信息

但是,
str\u extract\u all
返回一个列表。我需要将这个列表转换为一个向量,这样我就可以将这个向量作为一个新列包含到我的数据帧中

下面是一个可复制的示例。这是我通过
str\u extract\u all
返回的列表:

example_list <- list("[10]",
                     "[44]",
                     c("[9]", "[32]", "[98]"),
                     NA,
                     "[93]")
我想把这个列表转换成一个相同长度的向量。这是我想要的向量:

desired_vector <- c("[10]",
                  "[44]",
                  c("[9], [32], [98]"),
                  NA,
                  "[93]")
 not_desired_vector <- unlist(example_list)
或者,等效地,当它出现在数据帧中且未打印到控制台时,
所需的_向量
将如下所示:

[10]            
[44]            
[9], [32], [98]
NA
[93]
注意:
所需_向量中的上述逗号不需要,空格或无空格都可以

我尝试了各种方法,包括
取消列表
展平
。 使用
unlist
返回此不需要的向量:

desired_vector <- c("[10]",
                  "[44]",
                  c("[9], [32], [98]"),
                  NA,
                  "[93]")
 not_desired_vector <- unlist(example_list)

为了清楚起见,我希望列表作为与原始列表长度相同的向量返回,其中包含三个连续元素的列表部分不是作为向量的三个元素返回,而是作为向量的单个元素中的一个字符串返回


再次感谢您的时间-非常感谢向正确的方向推进。

使用
tidyverse
工具
map\u chr
str\u c
,我们可以迭代您的列表,将所有长度>1的向量与逗号分隔符连接在一起:

示例列表%map\u chr(~str\u c(,collapse=“,”))
#>[1]“[10]”[44]”[9]、[32]、[98]“NA
#> [5] "[93]"

由(v0.2.0)于2018年9月26日创建。

toString
应用于简化为向量的每个组件。这会将NA条目转换为字符串
“NA”
,因此请修复它们

res <- sapply(example_list, toString)
res[is.na(example_list)] <- NA
res
这可以用这样一行来表示:

> not_desired_vector
[1] "[10]" "[44]" "[9]"  "[32]" "[98]" NA     "[93]"
ifelse(is.na(example_list), NA, sapply(example_list, toString))
或使用magrittr管道:

library(magrittr)
example_list %>% { ifelse(is.na(.), NA, sapply(., toString)) }

deparse
函数有时会提供有用的结果。这与你的愿望不完全一样,但在未来可能会有用:

sapply(example_list, deparse)
[1] "\"[10]\""       "\"[44]\""        "c(\"[9]\", \"[32]\", \"[98]\")"
[4] "NA"             "\"[93]\""                      
你可以用一些正则表达式来清理它:

gsub("c\\(\\\"|\\\"|\\)", "", sapply(example_list, deparse) )
#[1] "[10]"            "[44]"            "[9], [32], [98]" "NA"              "[93]"           
方法2:

sapply( example_list, paste, collapse=", ")
[1] "[10]"            "[44]"            "[9], [32], [98]" "NA"              "[93]"     

也许
sapply(示例_list,FUN=function(x)if(all(is.na(x)))na else粘贴(x,collapse=“,”)
就足够了。这是一个问得很好的问题,包含示例数据、所需输出和已尝试的方法!非常感谢您的回复-这对我的需求非常有效
toString
正是我想要的。因为输出类型未知,所以最好不要使用sapply?我想toString()告诉我们输出类型,但我还是更喜欢vapply之类的东西(因为我不知道sapply可能会执行哪些其他简化)
sapply( example_list, paste, collapse=", ")
[1] "[10]"            "[44]"            "[9], [32], [98]" "NA"              "[93]"