我有這個矩陣 df 在第一列中包含所有單詞,在第 2-75 列中包含單詞所屬的不同 LIWC 類別。
這里有一個我所擁有的玩具示例:
| 單詞 | 姿勢 | 肯定 | 洞察力 |
|---|---|---|---|
| 當然 | 1 | 0 | 1 |
| 明顯地 | 1 | 1 | 1 |
| 當然 | 1 | 0 | 0 |
| 直接地 | 1 | 0 | 1 |
| 洞察力 | 1 | 1 | 0 |
| 保證 | 0 | 1 | 0 |
| 證明 | 1 | 0 | 1 |
這就是我想要實作的目標:
| 單詞 | 姿勢 | 肯定 | 洞察力 | 類別 |
|---|---|---|---|---|
| 當然 | 1 | 0 | 1 | 姿勢,洞察力 |
| 明顯地 | 1 | 1 | 1 | 姿勢,確定,洞察力 |
| 當然 | 1 | 0 | 0 | 姿勢 |
| 直接地 | 1 | 0 | 1 | 姿勢,洞察力 |
| 洞察力 | 1 | 1 | 0 | 姿勢,確定 |
| 保證 | 0 | 1 | 0 | 肯定 |
| 證明 | 1 | 0 | 1 | 姿勢,洞察力 |
我一直在尋找 stackoverflow,但似乎找不到適用于我正在嘗試做的事情的東西。這個從列中取出變數名并在 R 中創建新列很接近,但不處理條件。
有小費嗎?提前致謝
uj5u.com熱心網友回復:
嘗試使用apply:
data.frame( dat, Categories=t(
t( apply( dat[,2:4], 1, function(x) colnames(dat[,2:4])[as.logical(x)] ) ) ))
word posemo certain insight Categories
1 certainly 1 0 1 posemo, insight
2 obviously 1 1 1 posemo, certain, insight
3 sure 1 0 0 posemo
4 directly 1 0 1 posemo, insight
5 insight 1 1 0 posemo, certain
6 guarantee 0 1 0 certain
7 prove 1 0 1 posemo, insight
資料
dat <- structure(list(word = c("certainly", "obviously", "sure", "directly",
"insight", "guarantee", "prove"), posemo = c(1L, 1L, 1L, 1L,
1L, 0L, 1L), certain = c(0L, 1L, 0L, 0L, 1L, 1L, 0L), insight = c(1L,
1L, 0L, 1L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA,
-7L))
編輯速度,嘗試預定義關鍵資料
n <- colnames( dat[,2:4] )
lo <- dat[,2:4] == 1
data.frame( dat, Categories=t(t( apply( lo, 1, function(x) n[x] ) ) ))
uj5u.com熱心網友回復:
這可以解決問題:
遍歷行并找到哪些行等于 1 ( cols <- x[i,] == 1) 然后獲取這些列名 ( cats <- na.omit(colnames(x)[cols])) 然后將它們粘貼在一起作為單個字串并替換categories( x$categories[i] <- paste(cats, collapse = ", "))的值
x <- tibble(word = c("love","hate","sad"),
happy = c(1,0,0),
sad = c(0,1,1),
emotion = c(1,1,1),
categories = c(NA,NA,NA))
for(i in 1:nrow(x)){
cols <- x[i,] == 1
cats <- na.omit(colnames(x)[cols])
x$categories[i] <- paste(cats, collapse = ", ")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/358123.html
上一篇:從r中的資料集中洗掉尾隨的0和1
