如何在不考虑NAN的情况下为多个变量添加后缀?

How to add a suffix to multiples variables without considering NA?

为此 table 有必要在不考虑 NA 的情况下为每个变量添加 _T。

T1:

var1        var2     var3
Argentina   Italy     NA 
Mexico      Chile     NA
France      Hungary   NA
Spain       UK        NA

我试过这个代码:

o_cols <- c("var1", "var2", "var3")
out_cols <- paste0(o_cols, "_T")
output <- data.table (data_base)
output[, c(out_cols) := lapply(.SD, function(x){paste0(x, "_T")}), .SDcols 
= o_cols]

var_cols <- paste0(o_cols, "_value")

问题是包括"NA"在内的所有变量都加了_T.

最终结果必须如下所示:

    var1_value      var2_value        var3

    Argentina_T     Italy_T             NA 
    Mexico_T        Chile_T             NA
    France_T        Hungary_T           NA
    Spain_T         UK_T                NA

几乎。您可以将 ifelse() 添加到 lapply()

> result
       var1_T1    var2_T1 var3_T1
1 Argentina_T1   Italy_T1      NA
2    Mexico_T1   Chile_T1      NA
3    France_T1 Hungary_T1      NA
4     Spain_T1      UK_T1      NA

代码

# Paste each value as "value_T1" if it is not NA 
result <- data.frame(lapply(df, function(x) ifelse(!is.na(x), paste0(x, "_T1"), x)), 
                     stringsAsFactors = FALSE)
# Convert each column name to "name_T1"
colnames(result) <- paste0(colnames(result), "_T1")

数据

df <- read.table(text = "var1        var2     var3
Argentina   Italy     NA 
Mexico      Chile     NA
France      Hungary   NA
Spain       UK        NA", header = TRUE, as.is = TRUE)

开放式问题:你想用什么类型的逻辑来转换列名?一个 NA 是否足以不应用转换?是否所有值都必须为 NA 才能不执行此操作?

一个data.table选项

library(data.table)
DT <- fread(text)
for (nm in names(DT)) {
  tmp <- paste0(DT[[nm]], "_T")
  set(DT, i = which(!is.na(DT[[nm]])), j = nm, value = tmp)
}
DT
#          var1      var2 var3
#1: Argentina_T   Italy_T   NA
#2:    Mexico_T   Chile_T   NA
#3:    France_T Hungary_T   NA
#4:     Spain_T      UK_T   NA

数据

text <- "var1        var2     var3
Argentina   Italy     NA 
Mexico      Chile     NA
France      Hungary   NA
Spain       UK        NA"

你可以简单地做,

df[!is.na(df)] <- paste0(df[!is.na(df)], '_T')
df
#         var1      var2 var3
#1 Argentina_T   Italy_T   NA
#2    Mexico_T   Chile_T   NA
#3    France_T Hungary_T   NA
#4     Spain_T      UK_T   NA