r - 为什么 apply 将数据帧中的逻辑转换为 5 个字符的字符串?

标签 r dataframe apply

假设我有一个数据框:

mydf <- data.frame(colA = c(1,20), colB = c("a", "ab"), colC = c(T, F))

现在假设我想对数据框上的每一行应用一个函数。此函数使用 C 列的 bool 值。当使用 apply 时,每个非字符串都转换为列中存在的最大长度的字符串:
> apply(mydf, 1, '[', 3)
[1] " TRUE" "FALSE"

字符串 " TRUE"不再可以解释为逻辑。
> ifelse(apply(mydf, 1, '[', 3), 1, 2)
[1] NA  2

我可以用 gsub(" ", "", x) 解决这个问题,但我敢打赌有更好的方法。为什么apply当它可以直接将逻辑转换为字符串时有这种行为吗?有没有apply -like 没有上述行为的函数?

最佳答案

当您调用 apply ,您的数据框已转换为字符矩阵。出现空格是因为每个元素都转换为列中最宽元素的宽度。

您可以使用 for环状 sapply称呼

> ( s <- sapply(seq(nrow(mydf)), function(i) mydf[i, 3]) )
# [1]  TRUE FALSE
> class(s)
# [1] "logical"

解决您正在使用 apply 所做的事情的方法将会
> as.logical(gsub("\\s+", "", apply(mydf, 1, `[`, 3)))
# [1]  TRUE FALSE

但请注意,这些都与
> mydf[,3]
# [1]  TRUE FALSE

关于r - 为什么 apply 将数据帧中的逻辑转换为 5 个字符的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854139/

相关文章:

R时间戳差异打印

根据不同列中的值替换 data.frame 列中的值

python - 让 pandas Wide_to_long() 函数考虑 stub 在列名的末尾而不是开头

python - Groupby,转换 - 恢复到原始表

javascript - Angular JS View 尚未正确更新

r - 如何防止 reshape() 改变变量名

r - 如何在文本文件中找到最近的纬度和经度?

python - 使用 pandas 中相应 id 的其他数据帧的值填充列

python - 当索引不对齐时,pandas DataFrame 更新/合并

python - Pandas :根据与另一列名称部分匹配的列值创建新列