如果数据框中存在列,则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) <- "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在列上应用函数的主要内容,如果未能解决你的问题,请参考以下文章