簡體   English   中英

基於多個現有列創建新列

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

或者

我們可以將mutaterowSums一起使用:

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.

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