首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R for循环:使用来自不同列的子str计数创建一个新列

R for循环:使用来自不同列的子str计数创建一个新列
EN

Stack Overflow用户
提问于 2013-09-18 19:52:18
回答 3查看 460关注 0票数 1

我以前经常摆弄R,现在这一切似乎都逃掉了。。。

我有一个有几百列和大约100 K行的表。其中一列包含字符串,有时其中包含逗号(例如鸡、山羊、牛或只是鸡)。我需要一个带有(我相信) for循环的脚本,它可以创建一个新的列(我知道新的列代码不应该在for循环中),计算逗号的数量(或者列中的条目数减去一个),然后添加一个,这样我就可以知道每个列中有多少个条目。举个例子:

代码语言:javascript
复制
col
chicken
chicken,goat
cow,chicken,goat
cow

我想要一个脚本来转,在表中创建一个类似的列。。。

代码语言:javascript
复制
col2
1
2
3
1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-18 20:04:48

我想这里不需要循环。使用stringr包..。

代码语言:javascript
复制
require(stringr)
dat$aninum <- sapply(dat$ani,str_count,pattern=',')+1

这给

代码语言:javascript
复制
               ani aninum
1          chicken      1
2     chicken,goat      2
3 cow,chicken,goat      3
4              cow      1
票数 2
EN

Stack Overflow用户

发布于 2013-09-18 20:06:39

我将使用count.fields (来自R基):

代码语言:javascript
复制
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即可。

示例:

代码语言:javascript
复制
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
票数 7
EN

Stack Overflow用户

发布于 2013-09-18 20:06:59

你可以用?strsplit

代码语言:javascript
复制
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    1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18881136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档