获取R中的最大常用词
我有以下表格的数据:获取R中的最大常用词,r,nlp,R,Nlp,我有以下表格的数据: ID A1 A2 A3 ... A100 1 john max karl ... kevin 2 kevin bosy lary ... rosy 3 karl lary bosy ... hale . . . 10000 isha john lewis ... dave 我想为每个ID获得一个ID,这样它们都有最大数量的公共属性(A1、A2、…A100) 我在R
ID A1 A2 A3 ... A100
1 john max karl ... kevin
2 kevin bosy lary ... rosy
3 karl lary bosy ... hale
.
.
.
10000 isha john lewis ... dave
我想为每个ID获得一个ID,这样它们都有最大数量的公共属性(A1、A2、…A100)
我在R怎么做?
编辑:让我们将输出称为MatchId:
ID MatchId
1 70
2 4000
.
.
10000 3000
如果我理解正确,那么要求是为每个ID获取最大数量的公共属性 频率表可以使用
table()
获得,并在lappy()
中递归获得,假设ID列是唯一的-如果不是(unique(df$ID)
而不是lappy()
中的df$ID
),则需要稍微修改。可以选择最大频率,如果出现平局,则只选择第一个频率。最后,它们由do.call()
组合而成
df如果我理解正确,那么要求是为每个ID获取最大数量的公共属性
频率表可以使用table()
获得,并在lappy()
中递归获得,假设ID列是唯一的-如果不是(unique(df$ID)
而不是lappy()
中的df$ID
),则需要稍微修改。可以选择最大频率,如果出现平局,则只选择第一个频率。最后,它们由do.call()
组合而成
df我想这就是你想要的:
library(dplyr)
# make up some data
set.seed(1492)
rbind_all(lapply(1:15, function(i) {
x <- cbind.data.frame(stringsAsFactors=FALSE, i, t(sample(LETTERS, 10)))
colnames(x) <- c("ID", sprintf("A%d", 1:10))
x
})) -> dat
print(dat)
## Source: local data frame [15 x 11]
##
## ID A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
## 1 1 H F E C B A R J Z N
## 2 2 Q P E M L Z C G V Y
## 3 3 Q J D N B T L K G Z
## 4 4 D Y U F V O I C A W
## 5 5 T Z D I J F R C B S
## 6 6 Q D H U P V O E R N
## 7 7 C L I M E K N S X Z
## 8 8 M J S E N O F Y X I
## 9 9 R H V N M T Q X L S
## 10 10 Q H L Y B W S M P X
## 11 11 M N J K B G S X V R
## 12 12 W X A H Y D N T Q I
## 13 13 K H V J D X Q W A U
## 14 14 M U F H S T W Z O N
## 15 15 G B U Y E L A Q W O
# get commons
rbind_all(lapply(1:15, function(i) {
rbind_all(lapply(setdiff(1:15, i), function(j) {
data.frame(id1=i,
id2=j,
common=length(intersect(c(t(dat[i, 2:11])),
c(t(dat[j, 2:11])))))
}))
})) -> commons
commons %>%
group_by(id1) %>%
top_n(1, common) %>%
filter(row_number()==1) %>%
select(ID=id1, MatchId=id2)
## Source: local data frame [15 x 2]
## Groups: ID
##
## ID MatchId
## 1 1 5
## 2 2 7
## 3 3 5
## 4 4 12
## 5 5 1
## 6 6 9
## 7 7 8
## 8 8 7
## 9 9 10
## 10 10 9
## 11 11 9
## 12 12 13
## 13 13 12
## 14 14 8
## 15 15 2
库(dplyr)
#编造一些数据
种子集(1492)
rbind_all(lappy)(1:15,函数(i){
x公域
公共资源%>%
分组依据(id1)%>%
顶部(1,普通)%>%
过滤器(行号()==1)%>%
选择(ID=id1,MatchId=id2)
##来源:本地数据帧[15 x 2]
##组:ID
##
##身份证匹配身份证
## 1 1 5
## 2 2 7
## 3 3 5
## 4 4 12
## 5 5 1
## 6 6 9
## 7 7 8
## 8 8 7
## 9 9 10
## 10 10 9
## 11 11 9
## 12 12 13
## 13 13 12
## 14 14 8
## 15 15 2
我想这就是你想要的:
library(dplyr)
# make up some data
set.seed(1492)
rbind_all(lapply(1:15, function(i) {
x <- cbind.data.frame(stringsAsFactors=FALSE, i, t(sample(LETTERS, 10)))
colnames(x) <- c("ID", sprintf("A%d", 1:10))
x
})) -> dat
print(dat)
## Source: local data frame [15 x 11]
##
## ID A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
## 1 1 H F E C B A R J Z N
## 2 2 Q P E M L Z C G V Y
## 3 3 Q J D N B T L K G Z
## 4 4 D Y U F V O I C A W
## 5 5 T Z D I J F R C B S
## 6 6 Q D H U P V O E R N
## 7 7 C L I M E K N S X Z
## 8 8 M J S E N O F Y X I
## 9 9 R H V N M T Q X L S
## 10 10 Q H L Y B W S M P X
## 11 11 M N J K B G S X V R
## 12 12 W X A H Y D N T Q I
## 13 13 K H V J D X Q W A U
## 14 14 M U F H S T W Z O N
## 15 15 G B U Y E L A Q W O
# get commons
rbind_all(lapply(1:15, function(i) {
rbind_all(lapply(setdiff(1:15, i), function(j) {
data.frame(id1=i,
id2=j,
common=length(intersect(c(t(dat[i, 2:11])),
c(t(dat[j, 2:11])))))
}))
})) -> commons
commons %>%
group_by(id1) %>%
top_n(1, common) %>%
filter(row_number()==1) %>%
select(ID=id1, MatchId=id2)
## Source: local data frame [15 x 2]
## Groups: ID
##
## ID MatchId
## 1 1 5
## 2 2 7
## 3 3 5
## 4 4 12
## 5 5 1
## 6 6 9
## 7 7 8
## 8 8 7
## 9 9 10
## 10 10 9
## 11 11 9
## 12 12 13
## 13 13 12
## 14 14 8
## 15 15 2
库(dplyr)
#编造一些数据
种子集(1492)
rbind_all(lappy)(1:15,函数(i){
x公域
公共资源%>%
分组依据(id1)%>%
顶部(1,普通)%>%
过滤器(行号()==1)%>%
选择(ID=id1,MatchId=id2)
##来源:本地数据帧[15 x 2]
##组:ID
##
##身份证匹配身份证
## 1 1 5
## 2 2 7
## 3 3 5
## 4 4 12
## 5 5 1
## 6 6 9
## 7 7 8
## 8 8 7
## 9 9 10
## 10 10 9
## 11 11 9
## 12 12 13
## 13 13 12
## 14 14 8
## 15 15 2
使用@hrbrmstr提供的类似数据
set.seed(1492)
dat <- do.call(rbind, lapply(1:15, function(i) {
x <- cbind.data.frame(stringsAsFactors=FALSE, i, t(sample(LETTERS, 10)))
colnames(x) <- c("ID", sprintf("A%d", 1:10))
x
}))
set.seed(1492)
dat使用@hrbrmstr提供的类似数据
set.seed(1492)
dat <- do.call(rbind, lapply(1:15, function(i) {
x <- cbind.data.frame(stringsAsFactors=FALSE, i, t(sample(LETTERS, 10)))
colnames(x) <- c("ID", sprintf("A%d", 1:10))
x
}))
set.seed(1492)
dat不清楚您想要的输出是什么。您能举个例子吗?@Davidernburg edited。您的编辑与提供的数据集不对应。最好创建,比如说,15行数据集,并提供与提供的数据集对应的所需结果(不是您没有的真实结果)。如果是领带,您想做什么?@hrbrmstr取第一个。不清楚您想要的输出是什么。您能举个例子吗?@DavidArenburg edited。您的编辑与提供的数据集不对应。最好创建15行数据集,并提供与提供的数据集对应的所需结果(不是你没有的真品)。如果是领带,你想怎么办?@hrbrmstr拿第一个。这里apply()正在做setdiff()的工作,不是吗?如果你指的是@hrbrmstrs解决方案,我没有看。我想他在使用setdiff
以避免比较相同的ID。我没有这样做。我正在比较所有内容,然后运行diag(Res)here apply()正在做setdiff()的工作,不是吗?如果你指的是@hrbrmstrs解决方案,我没有看。我想他使用的是setdiff
,以避免比较相同的ID。我没有这样做。我正在比较所有内容,然后运行diag(Res)what filter()?只从组中计算出的“top n”中提取第一个元素。类似于head(df,1)
正常数据帧的过滤器()在做什么?仅从组的计算“top n”中提取第一个元素。类似于正常数据帧的头(df,1)