[英]Trying to count categories variables in R using rowSums
我正在嘗試對每行的每個觀察類別進行計數。
在下面的數據示例中,包含照片2、3、4、5、6的第一行是標題,而下面的一行則包含觀察值。
我會用countif在excel中做到這一點,但是數據集很大,這只是一個很小的樣本。 加螺絲Excel :)
photo 2 3 4 5 6
30001004501 SINV_SPO_V SINV_HYD LSUB_SAND Unc SINV_SPO_V
我正在嘗試這樣做,以便為我計算的每個觀察值創建一個新列,即,如果我試圖確定“ Unc”的頻率,則將擁有自己的列,其中包含對每個計數“ Unc”的計數次數行。
下面的代碼是我最近幾天嘗試過的事情之一,以及count和length命令的各種變化,但均未成功
data$Unc <-rowSums(data[,3:52] == "Unc", na.rm = F)
我試圖讓R只計算3到52之間的列
預先感謝您的任何幫助都令人沮喪,因為我知道這應該真的很容易
我希望這是有道理的
因此,如果我正確理解了您的請求,這是您問題的data.table解決方案,則可以在measure.vars中使用3:52來完成任務。 同樣,這僅在photo是唯一ID變量的情況下有效,否則,您應該自己創建一個並使用它
library(data.table)
# create example data.table
dt <- data.table(photo = 1:6,
x1 = c("a", "b", "a", "c", "a", "d"),
x2 = c("c", "c", "a", "c", "a", "d"),
x3 = c("c", "c", "a", "c", "a", "d"))
# Melt data.table, select which columns you need
dt_melt <- melt.data.table(dt, id.vars = 'photo', measure.vars = 2:3, variable.name = 'column')
# Get a resulting data.table with pairs of photo and observation
result_dt <- dt_melt[, .N, by = c('photo', 'value')]
photo value N
1: 1 a 1
2: 2 b 1
3: 3 a 2
4: 4 c 2
5: 5 a 2
6: 6 d 2
7: 1 c 1
8: 2 c 1
# For wide representation
dcast(result_dt, photo ~ value, value.var = 'N', fill = 0)
photo a b c d
1: 1 1 0 1 0
2: 2 0 1 1 0
3: 3 2 0 0 0
4: 4 0 0 2 0
5: 5 2 0 0 0
6: 6 0 0 0 2
我認為解決問題的一種方法是使用table
函數:
col1 <- c('a','b','b','b','a','c','b','a','c')
col2 <- c('d','e','d','d','d','d','d','d','e')
data = data.frame(col1,col2)
table(col1)
table(col2)
tab = table(data)
tab
margin.table(tab,1)
margin.table(tab,2)
table(col1)
將為您提供col1
類別變量的頻率,其結果與margin.table(tab,1)
。 因此,這取決於您是喜歡直接在data.frame還是在列上工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.