gpt4 book ai didi

r - 使用 R 逐行表

转载 作者:行者123 更新时间:2023-12-03 04:27:56 25 4
gpt4 key购买 nike

我想在数据框中按行制表。在以下示例中,我可以使用 apply 中的 table 获得足够的结果:

df.1 <- read.table(text = '
state county city year1 year2 year3 year4 year5
1 2 4 0 0 0 1 2
2 5 3 10 20 10 NA 10
2 7 1 200 200 NA NA 200
3 1 1 NA NA NA NA NA
', na.strings = "NA", header=TRUE)

tdf <- t(df.1)
apply(tdf[4:nrow(tdf),1:nrow(df.1)], 2, function(x) {table(x, useNA = "ifany")})

结果如下:

[[1]]
x
0 1 2
3 1 1

[[2]]
x
10 20 <NA>
3 1 1

[[3]]
x
200 <NA>
3 2

[[4]]
x
<NA>
5

但是,在以下示例中,每一行都包含一个值。

df.2 <- read.table(text = '
state county city year1 year2 year3 year4 year5
1 2 4 0 0 0 0 0
2 5 3 1 1 1 1 1
2 7 1 2 2 2 2 2
3 1 1 NA NA NA NA NA
', na.strings = "NA", header=TRUE)

tdf.2 <- t(df.2)
apply(tdf.2[4:nrow(tdf.2),1:nrow(df.2)], 2, function(x) {table(x, useNA = "ifany")})

我得到的输出是:

# [1] 5 5 5 5

因此,我无法从这个输出中看出第一个 5 代表 0,第二个 5 代表 1,第三个 5 代表 2,最后一个 5 代表 NA。有没有办法让 R 返回第二个示例中每个 5 代表的值?

最佳答案

您可以使用lapply系统地输出列表。您必须循环遍历行索引:

sub.df <- as.matrix(df.2[grepl("year", names(df.2))])
lapply(seq_len(nrow(sub.df)),
function(i)table(sub.df[i, ], useNA = "ifany"))

关于r - 使用 R 逐行表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825216/

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