Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中数据帧两列标题的相等性测试_R_Dataframe - Fatal编程技术网

R中数据帧两列标题的相等性测试

R中数据帧两列标题的相等性测试,r,dataframe,R,Dataframe,我想根据重复样本的名称在数据框中找到它们,然后计算它们的平均值。但首先,样本名称的相等性测试也不起作用(或者“连接”,我不确定,因为使用print()和write.table进行调试没有帮助)。我做错了什么 我的数据表有20531行和1155列,我想得到每行重复列的平均值 我的相等测试代码(第一列标题是“gene ID”,因此我跳过了dfs[,1],在相等测试之后,我尝试将目标列连接到一个数据帧): dfs一个技巧是下次与您共享数据。我不知道你的循环应该做什么,但是根据你的帖子,这就是你如何得到

我想根据重复样本的名称在数据框中找到它们,然后计算它们的平均值。但首先,样本名称的相等性测试也不起作用(或者“连接”,我不确定,因为使用print()和write.table进行调试没有帮助)。我做错了什么

我的数据表有20531行和1155列,我想得到每行重复列的平均值

我的相等测试代码(第一列标题是“gene ID”,因此我跳过了dfs[,1],在相等测试之后,我尝试将目标列连接到一个数据帧):


dfs一个技巧是下次与您共享数据。我不知道你的循环应该做什么,但是根据你的帖子,这就是你如何得到重复列的平均值

set.seed(1618)
dat <- matrix(rpois(100, 1), ncol = 10)
colnames(dat) <- sample(LETTERS[1:5], 10, replace = TRUE)
dat <- as.data.frame(dat, check.names = FALSE)

#    A B D E A B B C E B
# 1  0 2 0 2 3 1 0 0 3 0
# 2  1 1 0 1 0 1 0 0 2 1
# 3  0 0 2 0 0 1 4 1 3 0
# 4  1 0 0 0 0 2 0 2 0 1
# 5  0 1 0 1 0 2 0 2 0 1
# 6  1 0 2 1 1 1 1 0 1 0
# 7  1 1 1 0 1 1 1 1 0 0
# 8  0 1 1 1 1 0 1 1 0 0
# 9  0 1 1 1 1 2 0 1 0 0
# 10 0 1 0 2 1 0 0 2 0 1
set.seed(1618)

对不起,我将立即用我的数据描述编辑我的答案。在R编程中,我是全新的,但有一点C++经验,所以我可能看起来像R数据结构的小虚构。无论如何,我理解你的代码(至少我认为),但它的执行方式与我的完整脚本相同:“dfs中的错误。列表[[x]]:下标越界调用:sappy->sappy->lappy->FUN->apply”我不认为我试图访问超出其边界的数组。我想弄清楚我把什么搞砸了。谢谢你的回复!我认为您没有完全重复的列名。如果您将上面的replace=TRUE更改为FALSE,则没有重复项,我可以复制您的错误。当您使用
read.table
或类似工具读入数据,并且有重复的colname时,需要使用
check.names=FALSE
;否则,dup COL将被编码为
A、A.1、A.2
等。数据的
dup
dat.list
长度是多少?如果是零,那就是你的问题。另外,我刚刚用一个和你一样大的数据框运行了上面的程序,它在几秒钟内就在我破旧的笔记本上完成了,所以你应该不会有问题。谢谢,它帮了我很大的忙,我把它修好了!我使用了read.columns而不是read.table(我必须从多个文件中读取指定的列),在这个函数中无法设置'check.names'参数,但现在我重写了代码。
set.seed(1618)
dat <- matrix(rpois(100, 1), ncol = 10)
colnames(dat) <- sample(LETTERS[1:5], 10, replace = TRUE)
dat <- as.data.frame(dat, check.names = FALSE)

#    A B D E A B B C E B
# 1  0 2 0 2 3 1 0 0 3 0
# 2  1 1 0 1 0 1 0 0 2 1
# 3  0 0 2 0 0 1 4 1 3 0
# 4  1 0 0 0 0 2 0 2 0 1
# 5  0 1 0 1 0 2 0 2 0 1
# 6  1 0 2 1 1 1 1 0 1 0
# 7  1 1 1 0 1 1 1 1 0 0
# 8  0 1 1 1 1 0 1 1 0 0
# 9  0 1 1 1 1 2 0 1 0 0
# 10 0 1 0 2 1 0 0 2 0 1
(dups <- unique(names(dat)[duplicated(names(dat))]))
# [1] "A" "B" "E"
dat.list <- lapply(dups, function(x) dat[names(dat) %in% x])
# list of three
dat1 <- sapply(1:length(dat.list), function(x) 
  apply(dat.list[[x]], 1, mean))
colnames(dat1) <- dups

as.data.frame(dat1)
#      A    B   E
# 1  1.5 0.75 2.5
# 2  0.5 0.75 1.5
# 3  0.0 1.25 1.5
# 4  0.5 0.75 0.0
# 5  0.0 1.00 0.5
# 6  1.0 0.50 1.0
# 7  1.0 0.75 0.0
# 8  0.5 0.50 0.5
# 9  0.5 0.75 0.5
# 10 0.5 0.50 1.0