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

Posted

技术标签:

【中文标题】如果数据框中存在列,则R在列上应用函数【英文标题】:R apply a function on a column if column exist in dataframe 【发布时间】:2020-05-20 09:23:28 【问题描述】:

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

工作示例:

# 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 

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

【问题讨论】:

dd$a 是数字。在c 列上试试。也许使用is.character 添加一个测试。 代码中有明显错误。你的意思是Encoding(dd$c) &lt;- "UTF-8"?而且,解决方案是在您致电data.fame() 时告诉stringAsFactors = F @amatsuo_net,您想发表您的评论作为答案吗?这实际上解决了我的问题。谢谢! 【参考方案1】:

这里的问题是字符向量被转换为因子变量,这是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 创建

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

【讨论】:

【参考方案2】:

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

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

修改它,如果存在的话:

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

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

【讨论】:

以上是关于如果数据框中存在列,则R在列上应用函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在列上应用函数[重复]

如果不存在则添加列

特定数据框列上的 R Apply() 函数

在列组上应用函数

如何每天在特定列上聚合函数

spark:模式更改——如果存在,则转换和过滤列上的数据框;如果没有就不要