簡體   English   中英

R:從列的子集中為每一行找到確定的值

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

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