[英]R subset/create a data frame by For Loop
我正在用R進行For循環,以獲取每行的最后一個非NA值。 我將不得不使用For Loop。 我的數據如下:
col1 col2 col3 col4
A NA NA NA
B C NA NA
D E F NA
到目前為止,我嘗試過的是:
for (i in 1:nrow(df)){
index <- as.numeric(max(which(!is.na(df[i,]))))
product <- df[i, .SD, .SDcols = index]
print(product )
}
然后,R給出的結果為:
col1
1:A
col2
1:C
col3
1:F
但是我真正想要的是一個如下表:
Product ColName
A col1
C col2
F col3
我嘗試了as.data.table(df[i, .SD, .SDcols = index])
和as.data.frame(df[i, .SD, .SDcols = index])
,但它們都不起作用。 請讓我知道是否有任何方法可以“切換”我得到的結果。 任何幫助,將不勝感激!
這是使用tidyverse
套件的解決方案。 (抱歉,這不是for循環)。
library(tidyverse)
result <- df %>%
mutate(row_num = 1:n()) %>%
gather(ColName, Product, -row_num, na.rm = TRUE) %>%
mutate(col_num = str_match(ColName,"\\d+$")) %>%
group_by(row_num) %>%
summarize(
Product = Product[which.max(col_num)],
ColName = ColName[which.max(col_num)]
)
如果您不熟悉管道運算符( %>%
),則它將前一個函數的結果作為下一個函數的第一個參數傳遞。 當您依次調用一個函數時,這是避免嵌套大量括號的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.