从现有数据框列分配行名时出错
Error with assigning row names from existing dataframe column
我将物理测量值放入 csv,然后导入 R 进行计算。我找到了这些测量值的平均值和标准差,并将值为 NaN 的标准差指定为零。
第一列包含不同材料的(唯一)名称,我试图将此列指定为行名称。这会出现错误:无效的 'row.names' 长度,尽管我使用的是数据帧中的第一列。
data <- read.csv("my.csv", header = TRUE, fileEncoding = "UTF-8-BOM")
data <- data.frame(data) %>% select_if(~sum(!is.na(.)) > 0)
data_ave <- data %>% group_by(material) %>% summarise(mean_width = mean(width_cm), std_width = sd(width_cm))
data_ave$std[is.nan(data_ave$std_width)] <- 0
rownames(data_ave) <- data_ave[,1]
Error in `.rowNamesDF<-`(x, value = value) : invalid 'row.names' length
另外:
nrow(data_ave[,1])==nrow(data_ave)
TRUE
我已经对另一个数据框成功使用了类似的方法,然后简单地删除了第一列。他们怎么能有相同的行数,而 row.names 的长度是这里的问题?
干杯帮助
很可能是因为 data_ave
是一个 tibble。您也不能在 tibble 上设置行名 data_ave[, 1]
会 return 向后倾斜,这与数据帧不同 return 一个向量。
这可以用这个例子来证明。
library(dplyr)
data_ave <- mtcars %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg))
rownames(data_ave) <- data_ave[, 1]
Error in .rowNamesDF<-
(x, value = value) : invalid 'row.names' length
In addition: Warning message:
Setting row names on a tibble is deprecated.
解决方案是将 data_ave
更改为数据框。
data_ave <- data.frame(data_ave)
rownames(data_ave) <- data_ave[, 1]
data_ave
# cyl mpg
#4 4 26.66364
#6 6 19.74286
#8 8 15.10000
我将物理测量值放入 csv,然后导入 R 进行计算。我找到了这些测量值的平均值和标准差,并将值为 NaN 的标准差指定为零。
第一列包含不同材料的(唯一)名称,我试图将此列指定为行名称。这会出现错误:无效的 'row.names' 长度,尽管我使用的是数据帧中的第一列。
data <- read.csv("my.csv", header = TRUE, fileEncoding = "UTF-8-BOM")
data <- data.frame(data) %>% select_if(~sum(!is.na(.)) > 0)
data_ave <- data %>% group_by(material) %>% summarise(mean_width = mean(width_cm), std_width = sd(width_cm))
data_ave$std[is.nan(data_ave$std_width)] <- 0
rownames(data_ave) <- data_ave[,1]
Error in `.rowNamesDF<-`(x, value = value) : invalid 'row.names' length
另外:
nrow(data_ave[,1])==nrow(data_ave)
TRUE
我已经对另一个数据框成功使用了类似的方法,然后简单地删除了第一列。他们怎么能有相同的行数,而 row.names 的长度是这里的问题?
干杯帮助
很可能是因为 data_ave
是一个 tibble。您也不能在 tibble 上设置行名 data_ave[, 1]
会 return 向后倾斜,这与数据帧不同 return 一个向量。
这可以用这个例子来证明。
library(dplyr)
data_ave <- mtcars %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg))
rownames(data_ave) <- data_ave[, 1]
Error in
.rowNamesDF<-
(x, value = value) : invalid 'row.names' length In addition: Warning message: Setting row names on a tibble is deprecated.
解决方案是将 data_ave
更改为数据框。
data_ave <- data.frame(data_ave)
rownames(data_ave) <- data_ave[, 1]
data_ave
# cyl mpg
#4 4 26.66364
#6 6 19.74286
#8 8 15.10000