gpt4 book ai didi

r - 使用 R 作为数据框中列的字符串中字符的频率

转载 作者:行者123 更新时间:2023-12-05 00:58:15 24 4
gpt4 key购买 nike

我有一个数据框 initial以下格式的

> head(initial)
Strings
1 A,A,B,C
2 A,B,C
3 A,A,A,A,A,B
4 A,A,B,C
5 A,B,C
6 A,A,A,A,A,B

我想要的数据框是 final
    > head(final)
Strings A B C
1 A,A,B,C 2 1 1
2 A,B,C 1 1 1
3 A,A,A,A,A,B 5 1 0
4 A,A,B,C 2 1 1
5 A,B,C 1 1 1
6 A,A,A,A,A,B 5 1 0

要生成数据帧,可以使用以下代码来保持高行数
initial<-data.frame(Strings=rep(c("A,A,B,C","A,B,C","A,A,A,A,A,B"),100))
final<-data.frame(Strings=rep(c("A,A,B,C","A,B,C","A,A,A,A,A,B"),100),A=rep(c(2,1,5),100),B=rep(c(1,1,1),100),C=rep(c(1,1,0),100))

我可以实现这一目标的最快方法是什么?任何帮助将不胜感激

最佳答案

我们可以使用 base R此任务的方法。我们拆分“字符串”列( strsplit(...) ),设置输出名称 list与行序列,stack转换为 data.frame使用键/值列,使用 table 获取频率, 转换为 'data.frame' 和 cbind与原始数据集。

 cbind(df1, as.data.frame.matrix(
table(
stack(
setNames(
strsplit(as.character(df1$Strings),','), 1:nrow(df1))
)[2:1])))
# Strings A B C D
#1 A,B,C,D 1 1 1 1
#2 A,B,B,D,D,D 1 2 0 3
#3 A,A,A,A,B,C,D,D 4 1 1 2

或者我们可以使用 mtabulate拆分列后。
library(qdapTools)
cbind(df1, mtabulate(strsplit(as.character(df1$Strings), ',')))
# Strings A B C D
#1 A,B,C,D 1 1 1 1
#2 A,B,B,D,D,D 1 2 0 3
#3 A,A,A,A,B,C,D,D 4 1 1 2

更新

对于新数据集“初始”,第二种方法有效。如果我们需要以正确的顺序使用第一种方法,转换为 factorlevels 一起上课指定为 unique 'ind' 的元素。
df1 <- stack(setNames(strsplit(as.character(initial$Strings), ','),
seq_len(nrow(initial))))
df1$ind <- factor(df1$ind, levels=unique(df1$ind))
cbind(initial, as.data.frame.matrix(table(df1[2:1])))

关于r - 使用 R 作为数据框中列的字符串中字符的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com