如果列存在于数据框中,R 在列上应用函数

R apply a function on a column if column exist in dataframe

我想知道如何首先检查该列是否存在于数据框中,如果存在,我该如何修改该列。这应该是更大功能的一部分。

工作示例:

# working example
dd <- data.frame(a = c(1,2),
                 b = c(2,3),
                 c = c("a", "f"))
# Check if the "a" filed exist, if yes, change all values the whole column
if("a" %in% colnames(dd))
{
  print(dd$a)
  Encoding(dd$a) <- "UTF-8"
}

这给我带来了错误:

Error in `Encoding<-`(`*tmp*`, value = "UTF-8") : 
  a character vector argument expected 

感觉这个逻辑有问题,但又想不出正确的应用?

打印数据框中存在的相关列:

as.character(dd[,"a"]) 

修改它,如果它存在:

 Encoding(as.character(dd[,"a"]))

此外,在 R 4.0 版中,字符串不再自动转换为因子,因此您可能使用的是早期版本的 R。

这里的问题是字符向量被转换为因子变量,这是data.frame()的默认选项。这里的解决方案就是使用 stringsAsFactors = FALSE:

  dd <- data.frame(a = c(1,2),
                   b = c(2,3),
                   c = c("a", "Maur\xC3\xADcio"), stringsAsFactors = FALSE)

Encoding(dd$c)
#> [1] "unknown" "unknown"

# Check if the "c" field exists. If yes, convert the encoding of the variable
if("c" %in% colnames(dd)) {
  print(dd$c)
  Encoding(dd$c) <- "UTF-8"

}
#> [1] "a"        "Maurício"

Encoding(dd$c)
#> [1] "unknown" "UTF-8"

reprex package (v0.3.0)

于 2020-05-22 创建

注意:由于无法检查拉丁字母的编码,我对示例进行了一些更改。