gpt4 book ai didi

R table() 进入 data.frame 更改行名

转载 作者:行者123 更新时间:2023-12-02 01:47:48 24 4
gpt4 key购买 nike

我正在使用 table() 为同一数据帧中的多个值创建频率表。

### make up some data
orig.df<-data.frame(
decade=c("1910s","1910s","1920s","1930s"),
size=c("low (<1)", "high (>5000)", "medium (11-100)","low (<1)"),
plant=c("orange","apple","orange","apple")
)
data.frame(rbind(
table(orig.df$decade),
table(orig.df$size, orig.df$decade),
table(orig.df$plant, orig.df$decade)

))

X1910s X1920s X1930s
2 1 1
high (>5000) 1 0 0
low (<1) 1 0 1
medium (11-100) 0 1 0
apple 1 0 1
orange 1 1 0

列名中的 X 始终可以使用 gsub() 删除

问题是,我的数据包含 NA,并且我试图明确突出显示这些数据。不知何故,table(..., useNA="always") 在将多个表绑定(bind)到数据框时会产生问题。

data.frame(rbind(
table(orig.df$decade, useNA="always"),
table(orig.df$size, orig.df$decade, useNA="always"),
table(orig.df$plant, orig.df$decade, useNA="always")

))

X1910s X1920s X1930s NA.
X 2 1 1 0
high...5000. 1 0 0 0
low...1. 1 0 1 0
medium..11.100. 0 1 0 0
NA. 0 0 0 0
apple 1 0 1 0
orange 1 1 0 0
NA..1 0 0 0 0

我正在考虑使用 gsub() 就像 colname 一样,但是如果你仔细观察“.”可能意味着括号、空格和“-”,所以运气不好。

所需的输出(基本上是同一个表,只是有正确的名称,我真正的问题有几百行,所以我无法手动遍历所有行)

                1910s 1920s 1930s
2 1 1
high (>5000) 1 0 0
low (<1) 1 0 1
medium (11-100) 0 1 0
NA 0 0 0
apple 1 0 1
orange 1 1 0
NA 0 0 0

解决办法是什么?必须有一些简单的设置需要更改?

最佳答案

使用 as.data.framemake.names = FALSE 你会明白为什么你的名字实际上被改变了:

as.data.frame(rbind(
table(orig.df$decade, useNA="always"),
table(orig.df$size, orig.df$decade, useNA="always"),
table(orig.df$plant, orig.df$decade, useNA="always")
), make.names = FALSE)
#> Warning: non-unique values when setting 'row.names':
#> Error in `.rowNamesDF<-`(`*tmp*`, make.names = make.names, value = row.names): duplicate 'row.names' are not allowed

您的行名称重复,因此 R 正在尝试修复该问题。如果您想使用不同的方法来修复它,您可以编写一个快速函数来动态处理行名:

table2df <- function(x) {
data.frame(x, row.names = make.unique(paste(rownames(x))))
}

table2df(rbind(
table(orig.df$decade, useNA="always"),
table(orig.df$size, orig.df$decade, useNA="always"),
table(orig.df$plant, orig.df$decade, useNA="always")
))
#> X1910s X1920s X1930s NA.
#> 2 1 1 0
#> high (>5000) 1 0 0 0
#> low (<1) 1 0 1 0
#> medium (11-100) 0 1 0 0
#> NA 0 0 0 0
#> apple 1 0 1 0
#> orange 1 1 0 0
#> NA.1 0 0 0 0

关于R table() 进入 data.frame 更改行名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70694400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com