input <- read.table(header=F, text="abc 2
def 3
pq 2")
colnames(input) <- c("text","count")
我根据文本及其在数据中出现的次数进行输入。 我试图得到将复制文本行的输出显示计数的次数。我很难找到任何可以轻松完成的功能。
预期产出:
output <- read.table(header=F, text="abc 2
abc 2
def 3
def 3
def 3
pq 2
pq 2 ")
colnames(output) <- c("text","count")
任何帮助将不胜感激!!
答案 0 :(得分:2)
或者
as.data.frame(lapply(input, function(x) rep(x, input$count)))
# text count
# 1 abc 2
# 2 abc 2
# 3 def 3
# 4 def 3
# 5 def 3
# 6 pq 2
# 7 pq 2
答案 1 :(得分:2)
使用data.table
library(data.table)
setDT(input)[, .SD[rep(1:.N, count)]]
# text count
#1: abc 2
#2: abc 2
#3: def 3
#4: def 3
#5: def 3
#6: pq 2
#7: pq 2
或者
setDT(input)[input[,rep(1:.N, count)]]
答案 2 :(得分:1)
使用行索引:
input[rep(seq(nrow(input)),input$count),]
# or even
input[rep(rownames(input),input$count),]
# text count
#1 abc 2
#1.1 abc 2
#2 def 3
#2.1 def 3
#2.2 def 3
#3 pq 2
#3.1 pq 2
第二个选项有效,因为您可以按rownames
中的字符向量以及colnames
进行索引,例如:
rownames(input)
#[1] "1" "2" "3"
input["1",]
# text count
#1 abc 2
答案 3 :(得分:0)
by
应该快速完成这项工作。只需按行处理输入,然后将其全部加入:
output <- do.call(rbind, by(input, rownames(input), function(x) {
data.frame(text=rep(x$text, x$count), x$count)
}))
rownames(output) <- NULL
colnames(output) <- c("text","count")
print(output)
## text count
## 1 abc 2
## 2 abc 2
## 3 def 3
## 4 def 3
## 5 def 3
## 6 pq 2
## 7 pq 2
答案 4 :(得分:0)
您可以使用rep
with(input, {
data.frame(text = rep(levels(text), count), count = rep(count, count))
})
或者,使用辅助函数。两者都返回以下内容。输入数据中的inp
f <- function(j, k) rep(j, k)
data.frame(text = inp$text[f(inp[,1], inp[,2])], count = f(inp[,2], inp[,2]))
# text count
#1 abc 2
#2 abc 2
#3 def 3
#4 def 3
#5 def 3
#6 pq 2
#7 pq 2