gpt4 book ai didi

r - 具有重复列名的堆栈

转载 作者:行者123 更新时间:2023-12-04 05:14:28 25 4
gpt4 key购买 nike

我想将堆栈用于数据框并保留原始数据框中的重复列名。

a1<-data.frame(1:10,11:20,21:30)
colnames(a1)<-c('a','b','a')
a2<-stack(a1)

上面为 a2 中的 'a' 的重复列名添加了 'a.1'。我想将其保留为“a”。堆栈中有任何选项吗?

或者,我尝试使用循环替换所有“a1.1”。我在有很多重名的大 table 上没有成功。有没有更好的例子来替换 r 行中的模式(字符串)?

最后,我在这里问我在论坛上的第一个问题。感谢您的帮助。

最佳答案

通过查看 stack 的代码通过:

> getS3method('stack', 'default')

function (x, ...)
{
x <- as.list(x)
keep <- unlist(lapply(x, is.vector))
if (!sum(keep))
stop("at least one vector element is required")
if (!all(keep))
warning("non-vector elements will be ignored")
x <- x[keep]
data.frame(values = unlist(unname(x)), ind = factor(rep.int(names(x),
lapply(x, length))), stringsAsFactors = FALSE)
}

如您所见 ...参数未传递给 data.frame创作。您可以通过创建 say stack2 来修改此函数。如下:
stack2 <- function (x, ...) 
{
x <- as.list(x)
keep <- unlist(lapply(x, is.vector))
if (!sum(keep))
stop("at least one vector element is required")
if (!all(keep))
warning("non-vector elements will be ignored")
x <- x[keep]
data.frame(values = unlist(unname(x)), ind = factor(rep.int(names(x),
lapply(x, length))), stringsAsFactors = FALSE, ...) # note the ... here
}
# after copy/paste of stack2 function
> stack2(a1, check.names = FALSE)
values ind
1 1 a
2 2 a
3 3 a
4 4 a
5 5 a
6 6 a
7 7 a
8 8 a
9 9 a
10 10 a
11 11 b
12 12 b
13 13 b
14 14 b
15 15 b
16 16 b
17 17 b
18 18 b
19 19 b
20 20 b
21 21 a
22 22 a
23 23 a
24 24 a
25 25 a
26 26 a
27 27 a
28 28 a
29 29 a
30 30 a

注:勿传 stringsAsFactors = .对此的争论 stack2功能,因为它已经通过。可能这就是为什么他们没有通过 ...争论?

关于r - 具有重复列名的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466106/

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