我将在这里解释我的问题。这就是我所拥有的。
个别字符串列
df <- as.data.frame(c("NI",
"FA",
"FI",
"FST",
"FA,NI",
"IA,FI,IO",
"NI,DI",
"IA,NI,IO",
"IA,FT,FI",
"FA,FT,FI",
"IA,FST,FI"))
names(df) <- "Column_of_strings"
注意:输出可能不会带引号,但它们是字符串。我决定把它们包括在内。
df
Column_of_strings
"NI"
"FA"
"FI"
"FST"
"FA,NI"
"IA,FI,IO"
"NI,DI"
"IA,NI,IO"
"IA,FT,FI"
"FA,FT,FI"
"IA,FST,FI"
我想要的是什么:
Column_of_strings
"NI"
"FA"
"FI"
"FST"
"FA","NI"
"IA","FI","IO"
"NI","DI"
"IA","NI","IO"
"IA","FT","FI"
"FA","FT","FI"
"IA","FST","FI"
如果这些字符串组本身可以存储为矢量,那么甚至会更好。
Column_of_strings
c("NI")
c("FA")
c("FI")
c("FST")
c("FA","NI")
c("IA","FI","IO")
c("NI","DI")
c("IA","NI","IO")
c("IA","FT","FI")
c("FA","FT","FI")
c("IA","FST","FI")
总结:
有没有人知道如何:
所有建议都表示赞赏!
答案 0 :(得分:2)
我们split
可以使用strsplit
获得list
vector
个。{/ p>
lst <- strsplit(as.character(df[,1]), ',')
如果我们需要在list
中执行某些操作,我们可以使用lapply/sapply/vapply
等来遍历list
元素。例如,
lapply(lst, table)
答案 1 :(得分:2)
您可以使用tidyr::separate
将字符串拆分为多个列,并在必要时插入NA
:
library(tidyr)
df2 <- separate(df, Column_of_strings, c('str1', 'str2', 'str3'), sep = ',', fill = 'right')
df2
# str1 str2 str3
# 1 NI <NA> <NA>
# 2 FA <NA> <NA>
# 3 FI <NA> <NA>
# 4 FST <NA> <NA>
# 5 FA NI <NA>
# 6 IA FI IO
# 7 NI DI <NA>
# 8 IA NI IO
# 9 IA FT FI
# 10 FA FT FI
# 11 IA FST FI
如果我们创建索引列:
df2 <- cbind(id = seq_along(df2$str1), df2)
...然后我们可以使用reshape2::melt
以长格式(有时比列表更有用)放置数据并删除NA
,同时将所有位置信息保存在{{ 1}}和id
列:
variable