[英]Creating a new column based on several exiting columns
希望基於三個現有列創建新列 D:“A”“B”和“C”。 數據集還有其他變量 E、F、G 等。
每當 A 或 B 或 C 有值時,其他兩列都有 NA(E、F、G,不受它們影響)。 我需要的新變量“D”應該從任何 A、B 或 C 列中導入任何現有值。
A B C D E F G
1 NA NA 1
NA 2 NA 2
NA 4 NA 4
NA NA 2 2
NA NA 3 3
任何包中的任何簡單代碼都可以做到這一點? 先感謝您!
我見過其他可以完成工作的代碼,但他們的數據集只有 A、B 和 C,但我的數據集還有其他現有列,所以我需要可以指定 A、B 和 C 列的代碼。
一種選擇是在“A”、“B”、“C”上使用coalesce
來創建“D”- coalesce
將返回每行具有第一個非 NA 值的列
library(dplyr)
df1 <- df1 %>%
mutate(D = coalesce(A, B, C), .after = 'C')
使用across
更新:
df %>%
mutate(D = rowSums(across(A:C), na.rm = TRUE))
或者
我們可以將mutate
與rowSums
一起使用:
library(dplyr)
df %>%
mutate(D = rowSums(.[1:3], na.rm = TRUE))
A B C D E F G
1 1 NA NA 1 1 1 1
2 NA 2 NA 2 1 1 1
3 NA 4 NA 4 1 1 1
4 NA NA 2 2 1 1 1
5 NA NA 3 3 1 1 1
數據:
df <- structure(list(A = c(1L, NA, NA, NA, NA), B = c(NA, 2L, 4L, NA,
NA), C = c(NA, NA, NA, 2L, 3L), D = c(1L, 2L, 4L, 2L, 3L), E = c(1L,
1L, 1L, 1L, 1L), F = c(1L, 1L, 1L, 1L, 1L), G = c(1L, 1L, 1L,
1L, 1L)), class = "data.frame", row.names = c(NA, -5L))
一種基本的 R 方法是使用pmax
:
數據:
df <- data.frame(A = c(1, NA, NA, NA, NA),
B = c(NA, 2, 4, NA, NA),
C = c(NA, NA, NA, 2, 3))
代碼:
df$D <- pmax(df$A, df$B, df$C, na.rm = TRUE)
# or
df$D <- with(df, pmax(A, B, C, na.rm = TRUE))
輸出:
# A B C D
# 1 1 NA NA 1
# 2 NA 2 NA 2
# 3 NA 4 NA 4
# 4 NA NA 2 2
# 5 NA NA 3 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.