从列联表到R中的data.frame
我的出发点是让几个字符向量包含我从文本中提取的POS标记。例如:从列联表到R中的data.frame,r,dataframe,contingency,R,Dataframe,Contingency,我的出发点是让几个字符向量包含我从文本中提取的POS标记。例如: c("NNS", "VBP", "JJ", "CC", "DT") c("NNS", "PRP", "JJ", "RB", "VB") 我使用table或ftable统计每个标签的出现次数 CC DT JJ NNS VBP 1 1 1 1 1 最终目标是创建一个如下所示的data.frame: NNS VBP PRP JJ CC RB DT VB 1 1 1 0 1 1
c("NNS", "VBP", "JJ", "CC", "DT")
c("NNS", "PRP", "JJ", "RB", "VB")
我使用table或ftable统计每个标签的出现次数
CC DT JJ NNS VBP
1 1 1 1 1
最终目标是创建一个如下所示的data.frame:
NNS VBP PRP JJ CC RB DT VB
1 1 1 0 1 1 0 1 0
2 1 0 1 1 0 1 0 1
在这里使用plyr::rbind.fill对我来说似乎是合理的,但它需要data.frame对象作为输入。但是,当使用as.data.frame.matrixtablePOS_向量时,会发生错误
Error in seq_len(ncols) :
argument must be coercible to non-negative integer
使用as.data.frame.matrixftablePOS_向量实际上会生成一个data.frame,但没有colname
V1 V2 V3 V4 V5 ...
1 1 1 1 1
非常感谢您的帮助 这可能是一个解决办法,但这可能是一个解决方案 我们假设所有向量都在一个列表中:
dat <- list(c("NNS", "VBP", "JJ", "CC", "DT"),
c("NNS", "PRP", "JJ", "RB", "VB"))
我们还可以选择先将所有数据放在data.table中,然后进行聚合。注意,这假设向量长度相等
temp <- as.data.table(dat)
#turn to long format
temp_m <- melt(temp, measure.vars=colnames(temp))
#count values for each variable/value-combination, then reshape to wide
res <- dcast(temp_m[,.N,by=.(variable,value)], variable~value,value.var="N", fill=0)
这可能是一个解决办法,但这可能是一个解决方案 我们假设所有向量都在一个列表中:
dat <- list(c("NNS", "VBP", "JJ", "CC", "DT"),
c("NNS", "PRP", "JJ", "RB", "VB"))
我们还可以选择先将所有数据放在data.table中,然后进行聚合。注意,这假设向量长度相等
temp <- as.data.table(dat)
#turn to long format
temp_m <- melt(temp, measure.vars=colnames(temp))
#count values for each variable/value-combination, then reshape to wide
res <- dcast(temp_m[,.N,by=.(variable,value)], variable~value,value.var="N", fill=0)
在base R中,您可以尝试:
table(rev(stack(setNames(dat, seq_along(dat)))))
您还可以使用qdapTools中的mtabulate:
library(qdapTools)
mtabulate(dat)
# CC DT JJ NNS PRP RB VB VBP
# 1 1 1 1 1 0 0 0 1
# 2 0 0 1 1 1 1 1 0
dat与@Heroka回答中的定义相同:
dat <- list(c("NNS", "VBP", "JJ", "CC", "DT"),
c("NNS", "PRP", "JJ", "RB", "VB"))
在base R中,您可以尝试:
table(rev(stack(setNames(dat, seq_along(dat)))))
您还可以使用qdapTools中的mtabulate:
library(qdapTools)
mtabulate(dat)
# CC DT JJ NNS PRP RB VB VBP
# 1 1 1 1 1 0 0 0 1
# 2 0 0 1 1 1 1 1 0
dat与@Heroka回答中的定义相同:
dat <- list(c("NNS", "VBP", "JJ", "CC", "DT"),
c("NNS", "PRP", "JJ", "RB", "VB"))
非常优雅。你会考虑把这个添加到你的答案吗?非常优雅。你会考虑把这个添加到你的答案吗?谢谢你们的快速帮助,非常好!谢谢你们的快速帮助。