我以前经常摆弄R,现在这一切似乎都逃掉了。。。
我有一个有几百列和大约100 K行的表。其中一列包含字符串,有时其中包含逗号(例如鸡、山羊、牛或只是鸡)。我需要一个带有(我相信) for循环的脚本,它可以创建一个新的列(我知道新的列代码不应该在for循环中),计算逗号的数量(或者列中的条目数减去一个),然后添加一个,这样我就可以知道每个列中有多少个条目。举个例子:
col
chicken
chicken,goat
cow,chicken,goat
cow我想要一个脚本来转,在表中创建一个类似的列。。。
col2
1
2
3
1发布于 2013-09-18 20:04:48
我想这里不需要循环。使用stringr包..。
require(stringr)
dat$aninum <- sapply(dat$ani,str_count,pattern=',')+1这给
ani aninum
1 chicken 1
2 chicken,goat 2
3 cow,chicken,goat 3
4 cow 1发布于 2013-09-18 20:06:39
我将使用count.fields (来自R基):
mydf$col2 <- count.fields(file = textConnection(as.character(mydf$col)),
sep = ",")
mydf
# col col2
# 1 chicken 1
# 2 chicken,goat 2
# 3 cow,chicken,goat 3
# 4 cow 1更新:空白行的核算
count.fields有一个逻辑参数blank.lines.skip。因此,要捕获空行的信息,只需将其设置为TRUE即可。
示例:
mydf <- data.frame(col = c("chicken", "", "chicken,goat", "cow,chicken,goat", "cow"))
count.fields(file = textConnection(as.character(mydf$col)),
sep = ",", blank.lines.skip=FALSE)
# [1] 1 0 2 3 1发布于 2013-09-18 20:06:59
你可以用?strsplit
df <- data.frame(col=c("chicken", "chicken,goat", "cow,chicken,goat", "cow"), stringsAsFactors=FALSE)
df$col2 <- sapply(strsplit(df$col, ","), length)
df
# col col2
# 1 chicken 1
# 2 chicken,goat 2
# 3 cow,chicken,goat 3
# 4 cow 1https://stackoverflow.com/questions/18881136
复制相似问题