如何在R中创建具有合并值源的新变量
我有来自3个不同来源的医学注册数据,对于我的许多变量,我有来自每个注册的多个条目。每行仅包含来自1个注册表(源)的数据。我已经能够将这三个变量合并在一起,形成一个“新”变量,但我还想创建一个变量,说明合并后的变量来自哪个源。 我对以这种方式使用R是新手(通常我会匆忙回到excel来处理变量),我花了一些时间寻找类似的例子,但找不到答案。任何帮助都将不胜感激。(第一次贴海报,所以提出我的问题也很有帮助)如何在R中创建具有合并值源的新变量,r,tidyverse,coalesce,R,Tidyverse,Coalesce,我有来自3个不同来源的医学注册数据,对于我的许多变量,我有来自每个注册的多个条目。每行仅包含来自1个注册表(源)的数据。我已经能够将这三个变量合并在一起,形成一个“新”变量,但我还想创建一个变量,说明合并后的变量来自哪个源。 我对以这种方式使用R是新手(通常我会匆忙回到excel来处理变量),我花了一些时间寻找类似的例子,但找不到答案。任何帮助都将不胜感激。(第一次贴海报,所以提出我的问题也很有帮助) 库(tidyverse) df#A tible:5 x 3 #>var1 var2 var3
库(tidyverse)
df#A tible:5 x 3
#>var1 var2 var3
#>
#>1纳纳
#>2 NA NA
#>3 NA 3 NA
#>4NA 4NA
#>5 NA NA 5
#将x、y和z合并为“新”变量
>df$新df
#>#一个tibble:5x4
#>var1 var2 var3新
#>
#>1 NA NA 1
#>2钠钠钠2
#>3钠3钠3
#>4Na4Na4
#>5 NA NA 5
#我还想要一个变量,它给出合并变量的“源”,即
将如下所示,但我不知道如何执行此操作
>决赛
#>#一个tibble:5x5
#>var1 var2 var3新源
#>
#>1 NA NA 1 var1
#>2 NA NA 2 var1
#>3Na3Na3Var2
#>4Na4Na4Var2
#>5 NA NA 5 var3
一个选项:
df$source <-
do.call(
coalesce,
lapply(seq_len(ncol(df)), function(i) ifelse(is.na(df[[i]]), NA, names(df)[[i]]))
)
# [1] "var1" "var1" "var2" "var2" "var3"
第三种纯碱R溶液:
names(df)[apply(df, 1, function(x) match(FALSE, is.na(x)))]
# [1] "var1" "var1" "var2" "var2" "var3"
一种选择:
df$source <-
do.call(
coalesce,
lapply(seq_len(ncol(df)), function(i) ifelse(is.na(df[[i]]), NA, names(df)[[i]]))
)
# [1] "var1" "var1" "var2" "var2" "var3"
第三种纯碱R溶液:
names(df)[apply(df, 1, function(x) match(FALSE, is.na(x)))]
# [1] "var1" "var1" "var2" "var2" "var3"
按行使用
:
tibble(var1 = c(1,2,NA,NA,NA), var2 = c(NA,NA,3,4,NA),var3 = c(NA,NA,NA,NA,5)) %>%
rowwise() %>%
mutate(source = names(.)[which(!is.na(c_across(var1:var3)))])
var1 var2 var3 source
<dbl> <dbl> <dbl> <chr>
1 1 NA NA var1
2 2 NA NA var1
3 NA 3 NA var2
4 NA 4 NA var2
5 NA NA 5 var3
tibble(var1=c(1,2,NA,NA,NA),var2=c(NA,NA,3,4,NA),var3=c(NA,NA,NA,NA,NA,5))%%
行()
mutate(source=names(.)[其中(!是.na(c_-overs(var1:var3)))]))
var1 var2 var3源
1娜娜瓦拉1
2娜娜瓦拉1
3 NA 3 NA var2
4 NA 4 NA var2
5 NA NA 5 var3
按行使用
tibble(var1 = c(1,2,NA,NA,NA), var2 = c(NA,NA,3,4,NA),var3 = c(NA,NA,NA,NA,5)) %>%
rowwise() %>%
mutate(source = names(.)[which(!is.na(c_across(var1:var3)))])
var1 var2 var3 source
<dbl> <dbl> <dbl> <chr>
1 1 NA NA var1
2 2 NA NA var1
3 NA 3 NA var2
4 NA 4 NA var2
5 NA NA 5 var3
tibble(var1=c(1,2,NA,NA,NA),var2=c(NA,NA,3,4,NA),var3=c(NA,NA,NA,NA,NA,5))%%
行()
mutate(source=names(.)[其中(!是.na(c_-overs(var1:var3)))]))
var1 var2 var3源
1娜娜瓦拉1
2娜娜瓦拉1
3 NA 3 NA var2
4 NA 4 NA var2
5 NA NA 5 var3