[英]R: Find certain value for each row from a subset of columns
我是R和這個論壇的新手,因此對一個基本問題表示歉意。
我有一堆列(即變量,因為它是一個數據框),其中所有的別名都以相同的名稱開頭,但以不同的數字結尾,例如:variable_0,variable_1等,最多12個。
對於這些列中的每一列,每一行都包含數字,從零到十二。
我有興趣查找(對於每一行)colname的尾數與該特定變量的值匹配的值:
v_0 v_1 v_2 v_3
1 2 2 2
1 2 3 3
在此示例中,我想要的是一個新變量x,它對於第1行等於2(因為v_i = i僅對於i = 2)而對於第2行等於3。
理想情況下,代碼還應包含針對每行存在多個匹配項的解決方案:創建一個變量y,如果匹配項數超過1,則該變量為1,否則為零;否則,創建變量y。 將x設置為第一個匹配項。
非常感謝您的幫助! 謝謝!
嘗試這個:
trail = as.numeric(gsub(".*_([0-9]*)","\\1",names(df)))
df$x = apply(df, 1, function(u) if(all(trail!=u)) NA else trail[match(T,trail==u)])
#> df
# v_0 v_1 v_2 v_3 x
#1 1 2 2 2 2
#2 1 2 3 3 3
這樣,如果您有(如果有的話)糟糕的數據,例如:
df = data.frame(v_0=c(1,1,2), v_1=c(1,2,5), v_2=2:4, v_3=2:4)
# v_0 v_1 v_2 v_3
#1 1 1 2 2
#2 1 2 3 3
#3 2 5 4 4
df$x = apply(df, 1, function(u) if(all(trail!=u)) NA else trail[match(T,trail==u)])
# v_0 v_1 v_2 v_3 x
#1 1 1 2 2 1
#2 1 2 3 3 3
#3 2 5 4 4 NA
trail
包含每列的尾隨編號(我想鍵分隔符是_
)。 然后,對於每一行,我們檢查哪個數字等於其在列中的跟蹤號(我們使用apply
進行循環,第二個參數1
表示我們對行進行循環2
用於列)。 如果沒有匹配項,則返回NA
。 如果有一個或多個,我們取第一個數字。
使用@ColonelBeauvel數據的另一種選擇是
trail <- as.numeric(sub('[^0-9]+', '', names(df)))
indx <- df==trail[col(df)]
df$x <- trail[max.col(indx, 'first')* NA^!rowSums(indx)]
df
# v_0 v_1 v_2 v_3 x
#1 1 1 2 2 1
#2 1 2 3 3 3
#3 2 5 4 4 NA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.