簡體   English   中英

嘗試使用rowSums計算R中的類別變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM