计算R中多个列中字符串的出现次数

计算R中多个列中字符串的出现次数,r,R,我在R中有一个数据集,如下所示(仅显示相关列)。它有按性别分列的数据,说明受访者希望获得更多关于哪些作物的信息,以及这种作物对他们的优先程度 sex wantcropinfo1 priority1 wantcropinfo2 priority2 m wheat high eggplant medium m rice low cabbage

我在R中有一个数据集,如下所示(仅显示相关列)。它有按性别分列的数据,说明受访者希望获得更多关于哪些作物的信息,以及这种作物对他们的优先程度

sex     wantcropinfo1    priority1  wantcropinfo2     priority2 
m       wheat            high       eggplant          medium
m       rice             low        cabbage           high
m       rice             high
f       eggplant         medium
f       cotton           low
...    
我希望能够(a)计算所有
WantcropInfo
列中每个裁剪的总出现次数;(b)获得相同的计数,但按优先级排序;(c)做同样的事情,但按性别分类

(a) 输出应如下所示:

 crop     count
 wheat    1
 eggplant 2
 rice     2
 ...
 crop     countm   countf
 wheat    1        0
 eggplant 1        1
 rice     2        0
 ...
 crop     high_m   med_m  low_m  high_f   med_f   low_f
 wheat    1        0      0      0        0       0
 eggplant 0        1      0      0        1       0
 rice     1        0      1      0        0       0
 ...
(b) 输出应如下所示:

 crop     count
 wheat    1
 eggplant 2
 rice     2
 ...
 crop     countm   countf
 wheat    1        0
 eggplant 1        1
 rice     2        0
 ...
 crop     high_m   med_m  low_m  high_f   med_f   low_f
 wheat    1        0      0      0        0       0
 eggplant 0        1      0      0        1       0
 rice     1        0      1      0        0       0
 ...
(c) 应该是这样的:

 crop     count
 wheat    1
 eggplant 2
 rice     2
 ...
 crop     countm   countf
 wheat    1        0
 eggplant 1        1
 rice     2        0
 ...
 crop     high_m   med_m  low_m  high_f   med_f   low_f
 wheat    1        0      0      0        0       0
 eggplant 0        1      0      0        1       0
 rice     1        0      1      0        0       0
 ...

我是个新手,手册有点让人困惑。我在谷歌上搜索了很多,但找不到任何与此类似的东西,尽管这似乎是一件很常见的事情。关于stackoverflow的类似问题似乎提出了一些不同的问题。

plyr
包中使用
ddply
函数

如何使用此功能的结构如下所示:

ddply(dataframe,.(var1,var2,...), summarize, function)
在这种情况下,您可能需要执行以下操作:

  • a)
    ddply(df,((wantcropinfo),summary,count=length(wantcropinfo))
  • b)
    ddply(df,(wantcropinfo,优先级),summary,count=length(wantcropinfo))
  • c)
    ddply(df,((wantcropinfo,优先级,性别),summary,count=length(wantcropinfo))

  • 请注意,输出的结构与您在问题中提到的不同,但信息是相同的。对于上述结构,使用
    表格
    功能

    我们可以使用
    熔化
    数据。表格
    从“宽”格式转换为“长”格式。它可以采用多个
    度量

    library(data.table)
    dM <- melt(setDT(df1), measure = patterns("^want", "priority"),
           value.name = c("crop", "priority"))[crop!='']
    

    每篇帖子问一个问题就好了。你知道关于数据表的好教程吗?@DiegoAgher你可以看看这些小插曲。这是一个好消息,谢谢!我将把它添加到这里,以备将来参考@akrun-非常感谢-这看起来很完美。。。但是当我这么做的时候(为了保持简单):
    dM@akrun-好的,我明白了!它已将变量重命名为crop1:)不确定是否需要在您的答案中提及这一点,但我接受您的答案。再次感谢!谢谢你。然而,在(a)中,我想要两列wantcropinfo 1和wantcropinfo 2的总数,而不是我得到的wantcropinfo 1和wantcropinfo 2的所有不同组合的计数。