我有一个这样的数据框:
<body>
<div class="container">
<div class="nav">
<div class="navheader">
<div class="leftheader">
<ul>
<li style="float:left"><button class="buttonleft" type="button">SECTIONS</button></li>
<li style="float:left"><a href="#home">HOME</a></li>
<li style="float:left"><a href="#news">SEARCH</a></li>
</ul>
</div>
<div class="rightheader">
<ul>
<li style="float:right"><button class="buttonheader1" type="button">LOG IN</button></li>
<li style="float:right"><button class="buttonheader2" type="button">SUBSCRIBE</button></li>
</ul>
</div>
<div class="imgheader">
<img src="logo.png" alt="logo">
</div>
</div>
<div class="navarticles">
</div>
</div>
<div class="content">
</div>
<div class="footer">
</div>
</div>
</body>
输出应该是这样的:
ID TYPE
100010700239816 932100Y
100010700239816 9DDDDDDY
100010700239822 0000000000011222211121110100000000000000Y
所以这只是一个示例数据,单个单元格中可能有不同的元素,所有这些元素的数量都是我正在寻找的。 p>
我试过了:
ID 9 3 2 1 0 Y D
100010700239816 2 1 1 1 2 2 6
100010700239822 0 0 5 9 11 1 0
和
a <- count(TEST$TYPE)
但是我无法获得id的元素计数,我该怎么做?
答案 0 :(得分:3)
我们可以拆分&#39; TYPE&#39;,按ID分组&#39;和dcast
进入&#39;宽&#39;格式
library(data.table)
dcast(setDT(df1)[, unlist(strsplit(TYPE, "")) , ID], ID ~V1)
答案 1 :(得分:2)
我们也可以使用tidyverse
中的函数。我们可以strsplit
字符串,unnest
字符串和count
每个字符串ID组合的数字。最后,我们可以spread
数据框来获得所需的输出(dt2
)。
dt <- read.table(text = " ID TYPE
100010700239816 932100Y
100010700239816 9DDDDDDY
100010700239822 0000000000011222211121110100000000000000Y",
header = TRUE, stringsAsFactors = FALSE)
library(tidyverse)
dt2 <- dt %>%
mutate(TYPE = strsplit(TYPE, "")) %>%
unnest() %>%
count(ID, TYPE) %>%
spread(TYPE, n, fill = 0) %>%
select(c("ID", "9", "3", "2", "1", "0", "Y", "D"))
答案 2 :(得分:0)
使用stringr
df2 <- aggregate(TYPE ~ ID, data=df, FUN=paste, collapse='')
df2[, unique(unlist(strsplit(df2$TYPE, "")))] <- 0
library(stringr)
df2[, unique(unlist(strsplit(df2$TYPE, "")))] <- sapply(colnames(df2[, unique(unlist(strsplit(df2$TYPE, "")))]),
function(i) str_count(df2$TYPE, i))