我在R数据框中有一个字符串变量,其中包含用|分隔的不同数字.此变量的典型值具有不同的长度,如下所示:

st <– c("7.4|7.4|8|8|8|8|7.4|7.4|7.4|","0|-32|0|0|-32|-3|-3|-3|-3|-3|-3|-3|")

我想数一下每个数字的出现情况.不同的数字实际上对应于我的数据框中的变量:

 v1 <- c(8,-32) 
 v2 <- c(0,0)   
 v3 <– c(7.4,-3)

因此,理想情况下,我只需计算与每个变量相等的实例数量,结果如下所示:

count_v1 = c(4,2)
count_v2 = c(0,3)
count_v3 = c(5,7)

你知道我该怎么做吗?

下面是一个最小的例子:

st <- c("7.4|7.4|8|8|8|8|7.4|7.4|7.4|","0|-32|0|0|-32|-3|-3|-3|-3|-3|-3|-3|")
v1 <- c(8,-32) 
v2 <- c(0,0)   
v3 <- c(7.4,-3)

dat <- as.data.frame(cbind(v1,v2,v3,st))

再一次,我希望有新的变量与计数添加到相同的数据帧.

推荐答案

table(stack(setNames(strsplit(st, "|", fixed = TRUE), seq_along(st)))[2:1])
   values
ind -3 -32 0 7.4 8
  1  0   0 0   5 4
  2  7   2 3   0 0

现在,您可以从该表中读出所需的值

EDIT:

st <- c("7.4|7.4|8|8|8|8|7.4|7.4|7.4|","0|-32|0|0|-32|-3|-3|-3|-3|-3|-3|-3|")

tab <- table(stack(setNames(strsplit(st, "|", fixed = TRUE), seq_along(st))))

v1 <- c(8,-32) 
v2 <- c(0,0)   
v3 <- c(7.4,-3)


v <- data.frame(v1, v2, v3)
ind <- cbind(as.character(c(t(v))), as.character(t(row(v))))

cbind(v, count = matrix(tab[ind], nrow(v), byrow = T))



   v1 v2   v3 count.1 count.2 count.3
1   8  0  7.4       4       0       5
2 -32  0 -3.0       2       3       7

R相关问答推荐

计算转换的次数

R中的Fasttext langue_identification返回太多参数-如何与文本匹配?

卸载安装了BRM的模型发出的警告

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

使用R中的Shapetime裁剪格栅文件

找出疾病消失的受试者

基于多列将值链接到NA

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

如何根据R中其他列的值有条件地从列中提取数据?

在连续尺度上转置标签[瀑布图,R]

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

函数可以跨多个列搜索多个字符串并创建二进制输出变量

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

如何移除GGPlot中超出与面相交的任何格网像元

R+reprex:在呈现R标记文件时创建可重现的示例

如何将这个小列表转换为数据帧?

如果条件匹配,则使用Mariate粘贴列名

删除在R中的write.table()函数期间创建的附加行

如何构建一个for循环来循环处理动物ID?

如何在AER::ivreg中指定仪器?