首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dataframe列中计数元素数

在dataframe列中计数元素数
EN

Stack Overflow用户
提问于 2017-04-23 10:28:11
回答 2查看 1.8K关注 0票数 2

我有一个R数据,在这里,我从一些问卷调查数据导入了CSV文件。

我的专栏之一叫做“新闻方法”(NewsMethods),在这里,被调查者被要求列出他们获取新闻的方法。数据集中的数据如下所示:

  1. 广播;电视;新闻网站(如BBC新闻);社交媒体网站或应用;口碑
  2. 广播;电视;新闻网站(如BBC新闻);社交媒体网站或应用;口碑
  3. 广播;电视;社交媒体网站或应用程序;口碑电视;社交媒体网站或应用程序

..。诸若此类。

我想要做的是用它包含的元素数替换每一列。例如,我想用数字5代替第一个列表。

如果有人对我如何做到这一点有任何想法的话,我将非常感激。提亚

编辑

代码语言:javascript
复制
Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth
Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth
Radio;Television;Social Media websites or apps;Word of mouth
Television;Social Media websites or apps
Newspaper;Radio;Television;News websites (such as BBC News)
Television
Radio;Television;Word of mouth
Television;Social Media websites or apps;Word of mouth
Television;Word of mouth
Newspaper;Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth

我期待这一条改为:5 5 4 2 4 1 3 3 2 6

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-23 10:33:05

我们可以使用来自str_countstringr

代码语言:javascript
复制
library(stringr)
df1$Count <- str_count(df1$NewsMethods, ";")+1
df1$Count
#[1] 5 5 4 2 4 1 3 3 2 6

或者base R选项与regexpr一起使用

代码语言:javascript
复制
lengths(lapply(gregexpr(";", df1$NewsMethods), function(x) x[x>0]) )+1
#[1] 5 5 4 2 4 1 3 3 2 6

数据

代码语言:javascript
复制
df1 <- structure(list(NewsMethods = c('Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth',
                                  'Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth',
                                  'Radio;Television;Social Media websites or apps;Word of mouth',
                                  'Television;Social Media websites or apps',
                                  'Newspaper;Radio;Television;News websites (such as BBC News)',
                                  'Television',
                                  'Radio;Television;Word of mouth',
                                  'Television;Social Media websites or apps;Word of mouth',
                                  'Television;Word of mouth',
                                  'Newspaper;Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth')), 
             .Names = "NewsMethods", row.names = c(NA, -10L), class = "data.frame")
票数 2
EN

Stack Overflow用户

发布于 2017-04-23 11:09:40

strsplitlengths组合的R基选择

代码语言:javascript
复制
lengths(strsplit(dfr$NewsMethods, split = ';'))

这意味着:

代码语言:javascript
复制
> lengths(strsplit(dfr$NewsMethods, split = ';'))
 [1] 5 5 4 2 4 1 3 3 2 6

将结果分配给数据文件中的count-variable:

代码语言:javascript
复制
dfr$count <- lengths(strsplit(dfr$NewsMethods, split = ';'))

现在,您的dataframe看起来如下:

代码语言:javascript
复制
> dfr
                                                                                               NewsMethods count
1            Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth     5
2            Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth     5
3                                             Radio;Television;Social Media websites or apps;Word of mouth     4
4                                                                 Television;Social Media websites or apps     2
5                                              Newspaper;Radio;Television;News websites (such as BBC News)     4
6                                                                                               Television     1
7                                                                           Radio;Television;Word of mouth     3
8                                                   Television;Social Media websites or apps;Word of mouth     3
9                                                                                 Television;Word of mouth     2
10 Newspaper;Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth     6

使用的数据:

代码语言:javascript
复制
dfr <- structure(list(NewsMethods = c('Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth',
                                      'Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth',
                                      'Radio;Television;Social Media websites or apps;Word of mouth',
                                      'Television;Social Media websites or apps',
                                      'Newspaper;Radio;Television;News websites (such as BBC News)',
                                      'Television',
                                      'Radio;Television;Word of mouth',
                                      'Television;Social Media websites or apps;Word of mouth',
                                      'Television;Word of mouth',
                                      'Newspaper;Radio;Television;News websites (such as BBC News);Social Media websites or apps;Word of mouth')), 
                 .Names = "NewsMethods", row.names = c(NA, -10L), class = "data.frame")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43569942

复制
相关文章

相似问题

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