如果列存在于数据框中,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 创建
注意:由于无法检查拉丁字母的编码,我对示例进行了一些更改。
我想知道如何首先检查该列是否存在于数据框中,如果存在,我该如何修改该列。这应该是更大功能的一部分。
工作示例:
# 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 创建注意:由于无法检查拉丁字母的编码,我对示例进行了一些更改。