我有一個串列物件,其中包含幾個包含年份列和特定單詞頻率的表。每個表的尺寸可能略有不同,具體取決于使用的年份和單詞的范圍。
| 年 | 字 1 | 字2 | 詞3 |
|---|---|---|---|
| 2009年 | 1 | 5 | 4 |
| 2010年 | 2 | 3 | 5 |
我想創建一個表格,對每一行(不包括年份)求和,然后將列值除以行總和,以便生成如下表格:
| 年 | 字 1 | 字2 | 詞3 |
|---|---|---|---|
| 2009年 | 0.1 | 0.5 | 0.4 |
| 2010年 | 0.2 | 0.3 | 0.5 |
有沒有辦法對串列物件執行此操作?TIA
uj5u.com熱心網友回復:
這是否有效:
cbind(df[1], t(apply(df[-1], 1, function(x) x/sum(x))))
Year word1 word2 word3
1 2009 0.1 0.5 0.4
2 2010 0.2 0.3 0.5
如果您有此類資料框的串列:
mylist <- list(df, df)
mylist
[[1]]
Year word1 word2 word3
1 2009 1 5 4
2 2010 2 3 5
[[2]]
Year word1 word2 word3
1 2009 1 5 4
2 2010 2 3 5
lapply(mylist, function(y) cbind(y[1], t(apply(y[-1], 1, function(x) x/sum(x)))))
[[1]]
Year word1 word2 word3
1 2009 0.1 0.5 0.4
2 2010 0.2 0.3 0.5
[[2]]
Year word1 word2 word3
1 2009 0.1 0.5 0.4
2 2010 0.2 0.3 0.5
使用的資料:
df
Year word1 word2 word3
1 2009 1 5 4
2 2010 2 3 5
uj5u.com熱心網友回復:
對于單個 data.frame,您可以使用以下函式:
doit <- function(df) {
cbind(df[1],sweep(df[-1],1,rowSums(df[-1]),"/"))
}
例如
df <- data.frame(Year = 1:3, Word1 = c(1,2,3), Word2 = c(3,2,1), Word3 = c(6,6,6))
doit(df)
# Year Word1 Word2 Word3
#1 1 0.1 0.3 0.6
#2 2 0.2 0.2 0.6
#3 3 0.3 0.1 0.6
如果串列中有多個 data.frames,只需用 包裹所有內容lapply,例如lapply(dfList,doit)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/335419.html
