Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取R中的最大常用词_R_Nlp - Fatal编程技术网

获取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)