错误:必须使用有效的下标向量对列进行子集。x 由于精度损失,无法从 <double> 转换为 <integer>

Error: Must subset columns with a valid subscript vector. x Can't convert from <double> to <integer> due to loss of precision

提问人:vp_050 提问时间:7/20/2020 更新时间:12/11/2020 访问量:36752

问:

我正在处理一个包含所有数值类型变量的数据框

summary.default(pfnew)
  • ID 6016315 -none- 数字
  • 迭代器 6016315 -none- numeric
  • 值 6016315 -none- numeric
  • CV 6016315 -none- 数字

我想创建一个按迭代器和 CV 分组的数据透视表,并汇总 ID 计数。从本质上讲,我想要数据框中与一组特定的迭代器和 CV 值相对应的点数。我使用的代码是:

法典

install.packages("tidyr")
install.packages("dplyr")
install.packages("vctrs")
library(vctrs)
library(tidyr)
library(dplyr)
allow_lossy_cast(pivot<-pfnew%>%
  select(pfnew$iterator,pfnew$CV,pfnew$ID)%>%
  summarise(CT=count(pfnew$ID)))

但正如在其他论坛上讨论的那样,即使在使用allow_lossy_cast后,我也收到相同的错误消息。

错误:必须使用有效的下标向量对列进行子集。x 由于精度损失,无法从 转换为。

我们该如何解决这个问题?或者我们可以用任何其他方式做同样的工作吗?

r 透视表 数据转换

评论


答:

6赞 Emily Chen 8/9/2020 #1

我只是在不同的 dplyr 函数中遇到了相同的错误,并意识到我在调用数据帧后包含了它的名称。尝试从 select 中删除 pfnew$ 并总结它,使其为 select(c(iterator, CV,ID))。

2赞 Akankhya Mohapatra 12/11/2020 #2

选择函数在使用 DataFrame 调用预测变量时引发错误。尝试将列名称重命名为更合适的名称,以防它仍然存在(如果不使用 DataFrame 调用预测变量列,则在名称中使用空格将引发错误,因此避免在列名中使用空格)并直接使用预测变量名称,这将解决问题。

示例 - 而不是 , 使用,然后在 select 中直接使用此名称 -pfnew$This is an examplepfnew$This_Is_an_example

select(This_Is_an_example) %>%
....

评论

2赞 denis 12/11/2020
欢迎来到 Stack。请使用 '' 或缩进进行代码突出显示,请参阅 stackoverflow.com/editing-help