如何在不考虑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
为此 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