如何在dplyr中使用不等列(反向字符串)进行分隔
我正在处理调查数据,试图在一列中找到多个答案。问题是可能有1-5个答案,用逗号分隔 我该如何扭转这种局面:如何在dplyr中使用不等列(反向字符串)进行分隔,r,dplyr,tidyr,tidyverse,R,Dplyr,Tidyr,Tidyverse,我正在处理调查数据,试图在一列中找到多个答案。问题是可能有1-5个答案,用逗号分隔 我该如何扭转这种局面: df <- data.frame( splitThis = c("A,B,C","B,C","A,C","A","B","C") ) > df splitThis 1 A,B,C 2 B,C 3 A,C 4 A 5 B 6 C df 分开这个 1 A、B、C 2 B,C 3 A、C 4A
df <- data.frame(
splitThis = c("A,B,C","B,C","A,C","A","B","C")
)
> df
splitThis
1 A,B,C
2 B,C
3 A,C
4 A
5 B
6 C
df
分开这个
1 A、B、C
2 B,C
3 A、C
4A
5 B
6 C
为此:
intoThis <- data.frame(
A = c(1,0,1,1,0,0),
B = c(1,1,0,0,1,0),
c = c(1,1,1,0,0,1)
)
> intoThis
A B c
1 1 1 1
2 0 1 1
3 1 0 1
4 1 0 0
5 0 1 0
6 0 0 1
intoThis intoThis
A、B、c
1 1 1 1
2 0 1 1
3 1 0 1
4 1 0 0
5 0 1 0
6 0 0 1
任何争吵的帮助都将不胜感激 通过
,
library(qdapTools)
mtabulate(strsplit(as.character(df$splitThis), ","))
# A B C
#1 1 1 1
#2 0 1 1
#3 1 0 1
#4 1 0 0
#5 0 1 0
#6 0 0 1
正如OP也提到的
dplyr/tidyr
library(dplyr)
library(tidyr)
library(tibble)
rownames_to_column(df, "rn") %>%
separate_rows(splitThis) %>%
table()
或者使用tidyverse
软件包
rownames_to_column(df, "rn") %>%
separate_rows(splitThis) %>%
group_by(rn, splitThis) %>%
tally %>%
spread(splitThis, n, fill=0) %>%
ungroup() %>%
select(-rn)
# A tibble: 6 × 3
# A B C
#* <dbl> <dbl> <dbl>
#1 1 1 1
#2 0 1 1
#3 1 0 1
#4 1 0 0
#5 0 1 0
#6 0 0 1
行名到列(df,“rn”)%>%
分隔_行(拆分此)%>%
分组依据(rn,拆分此)%>%
计数%>%
排列(拆分此,n,填充=0)%>%
解组()%>%
选择(-rn)
#一个tibble:6×3
#A、B、C
#*
#1 1 1 1
#2 0 1 1
#3 1 0 1
#4 1 0 0
#5 0 1 0
#6 0 0 1
你是一位天才和学者。让我来实现它,看看它是否适用于我的数据。出于某种原因,我认为tibble
是一个Hadleyverse
软件包。@Dan是的,tibble就是其中的一部分。在上一篇文章中,我通过base R
中的table
获得了结果,因此我想使用排列
等。感谢您的慷慨评论。我认为我每天都是从你们的问题和来自他人的伟大答案中学习的。