标签: rbind

提取data.table的段

我有一个data.table,我需要从不同的行位置开始提取相等长度的段.最简单的方法是什么?例如:

x <- data.table(a=sample(1:1000,100), b=sample(1:1000,100))
r <- c(1,2,10,20,44)
idx <- lapply(r, function(i) {j <-which(x$a == i); if (length(j)>0) {return(j)} })
y <- lapply(idx, function(i) {if (!is.null(i)) x[i:(i+5)]})
do.call(rbind, y)
    a   b
1:  44  63
2:  96 730
3: 901 617
4: 446 370
5: 195 341
6: 298 411
Run Code Online (Sandbox Code Playgroud)

这当然不是data.table做事的方式所以我希望有更好的方法吗?

编辑:根据下面的评论,我编辑它只是为了清楚,它们中的值a不一定是连续的,也不对应于行号.

r rbind do.call data.table

4
推荐指数
1
解决办法
938
查看次数

rbind数据帧,重复的行名问题

虽然允许使用重复的行(和列)名称matrix,但不允许使用data.frame。尝试对rbind()具有共同行名的某些数据框突出显示此问题。考虑下面的两个数据帧:

foo = data.frame(a=1:3, b=5:7)
rownames(foo)=c("w","x","y")
bar = data.frame(a=c(2,4), b=c(6,8))
rownames(bar)=c("x","z")
# foo               bar
#   a b               a b
# w 1 5             x 2 6
# x 2 6             y 4 8
# y 3 7
Run Code Online (Sandbox Code Playgroud)

现在尝试使用rbind()它们(请注意行名):

rbind(foo, bar)
#    a b
# w  1 5
# x  2 6
# y  3 7
# x1 2 6
# z  4 8
Run Code Online (Sandbox Code Playgroud)

但是对于matrix

rbind(as.matrix(foo), as.matrix(bar))
#   a b
# …
Run Code Online (Sandbox Code Playgroud)

r duplicates duplicate-removal dataframe rbind

4
推荐指数
1
解决办法
9872
查看次数

R和rbind制作没有相同长度的条目为零

说我有两个向量v1v2和,我想打电话rbind(v1, v2).但是,假设length(v1)> length(v2).从文档中我已经读过,较短的向量将被回收.以下是此"回收"的示例:

> v1 <- c(1, 2, 3, 4, 8, 5, 3, 11)
> v2 <- c(9, 5, 2)
> rbind(v1, v2)
   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
v1    1    2    3    4    8    5    3   11
v2    9    5    2    9    5    2    9    5
Run Code Online (Sandbox Code Playgroud)
  1. 是否有任何简单的方法可以阻止v2被回收,而是将其余的条目设为0?
  2. 有没有更好的方法来构建向量和矩阵?

非常感谢所有帮助!

r vector matrix rbind

4
推荐指数
1
解决办法
3557
查看次数

如何根据对象名称对矩阵进行rbind?

我想rbind在一个摘要中有几个矩阵.它们是不同功能的对象产品,并且在它们的名称中共享一个模式.

我想要做的是告诉R寻找具有该常见模式的所有对象然后再查找rbind它们.

假设存在这些矩阵:

commonname.N1<-matrix(nrow=2,ncol=3)
commonname.N2<-matrix(nrow=2,ncol=3)
commonname.M1<-matrix(nrow=2,ncol=3)
Run Code Online (Sandbox Code Playgroud)

我试过这样的东西来得到它们:

mats<-grep(x= ls(pos=1), pattern="commonname.", value=TRUE)
mats
[1] "commonname.N1" "commonname.N2" "commonname.M1"    
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是如何判断rbind使用它作为参数.基本上我会提供与rbind(commonname.N1, commonname.N2, commonname.M1)本例中相同的矩阵.

我已经尝试过了

mats<-toString(mats)
rbind(mats2)
Run Code Online (Sandbox Code Playgroud)

但这只是创建一个矩阵,其中不同的对象作为名称.

这里也提出类似的问题,但是:

mats<-as.list(mats)
do.call(what=rbind, args=as.list(mats))
Run Code Online (Sandbox Code Playgroud)

不做这个工作.

对不起,如果有什么基本的我在某处遗漏,但我无法弄明白,我对R来说比较新.

r rbind

4
推荐指数
1
解决办法
1112
查看次数

绑定 3d 数组中的工作表行以制作 2d 数组

我有一个 3 维数组,并希望通过逐行堆叠一维(组合一维行)来折叠为二维数组。在我的代码中,我在每个索引处填充了一个二维数组的“工作表”(第 3 维),现在我想获取该 3 维数组并将这些工作表的行堆叠在一起。

这是一个示例数组,因此我可以解释我希望最终结果的样子:

x <- array(1:24, dim=c(2, 3, 4),
           dimnames=list(letters[1:2], LETTERS[1:3], letters[23:26]))
dim(x)
Run Code Online (Sandbox Code Playgroud)

我希望w, x, y,z在一个二维数组中相互堆叠,该数组有 8 行和 3 列。这是一种麻烦的方法(并且在我的循环中不可能):

x1<-x[,,1]
x2<-x[,,2]
x3<-x[,,3]
x4<-x[,,4]

All<-rbind(x1,x2,x3,x4)
Run Code Online (Sandbox Code Playgroud)

我已经看过了abindadrop但他们不太正确。

我也试过,aperm但我认为你不能用这个来减少尺寸,只是转置(?)

或者,我可以创建一个list(这将是理想的,实际上,因为数组可能具有不同的行号)。在这种情况下,我将如何以相同的方式组合列表中多个元素的行?

谢谢!

arrays r multidimensional-array collapse rbind

4
推荐指数
1
解决办法
942
查看次数

如何将数据框中的每个列拆分为两列?

我有一个这样的数据框(4行和5列):

Marker ind1 ind2 ind3 ind4
mark1             CT             TT             CT             TT
mark2             AG             AA             AG             AA
mark3             AC             AA             AC             AA
mark4             CT             TT             CT             TT
Run Code Online (Sandbox Code Playgroud)

我想要做的是将每个列(第一个coloumn除外)拆分为两列.所以输出应该像这样(4行9列):

Marker ind1 ind1 ind2 ind2 ind3 ind3 ind4 ind4
mark1             C T             T T             C T             T T
mark2             A G             A A             A G             A A
mark3             A C             A A             A C             A A
mark4             C T             T T             C T             T T
Run Code Online (Sandbox Code Playgroud)

我知道如何拆分一列

do.call(rbind,strsplit(test$JRP4RA6119.039, ""))
Run Code Online (Sandbox Code Playgroud)

这给了这个:

      [,1] [,2]
 [1,] "C" …
Run Code Online (Sandbox Code Playgroud)

loops r strsplit rbind

4
推荐指数
2
解决办法
138
查看次数

计算 r 中点对之间的距离

假设我生成了 10 个随机点

x <- runif(10, min = -10, max = 10)
y <- runif(10, min = -10, max = 10)
Run Code Online (Sandbox Code Playgroud)

我想计算每对点之间的距离。所以我用

d <- dist(cbind(x,y)) 
Run Code Online (Sandbox Code Playgroud)

我得到了一个漂亮的 9*9 矩阵。

但是,如果我使用

d1 <- dist(rbind(x,y))
Run Code Online (Sandbox Code Playgroud)

结果我只得到了 1 个数字。

谁能为我解释一下吗?

r distance rbind cbind

4
推荐指数
1
解决办法
5485
查看次数

rbind(deparse.level, ...) 中的错误:列表参数无效:所有变量都应具有相同的长度

我正在尝试使用“rbind”来获取结果,但显示错误“rbind(deparse.level, ...) 中的错误:列表参数无效:所有变量都应具有相同的长度”

pm2 <- function(directory, id=1:322)
{
  files  <- list.files(path = directory, full.names = TRUE)
  df <- data.frame()
  for (i in 1:322)
  {
        fil <- read.csv(files[i])
        df <- rbind(df, fil)
  }
  df2 <- data.frame(matrix(nrow = length(id), ncol = 2))
  colnames(df2) <- c("id", "nobs")
  for(i in id){

        rbind(df2, c(df[[id[i]]],count((df[[id[i]]])),na.rm = TRUE)) 

  }
  df2
}
pm2("specdata", 1:10)
Run Code Online (Sandbox Code Playgroud)

r rbind

4
推荐指数
1
解决办法
7833
查看次数

如何在不更改col类的情况下向dataframe添加行?

我有一个15个变量的5个观测数据框.一些类是字符,一些是数字,一些是整数.我想在我的数据框中添加一个新行.我这样做是通过创建一个新行:

newrow= c('Chiyoda',600,.08,2,1500,1,3000,6500,10, .65, .1, 0,0,0,0)
Run Code Online (Sandbox Code Playgroud)

然后将其重新绑定到我的数据框:

mydata = rbind(mydata,newrow)
Run Code Online (Sandbox Code Playgroud)

问题是,当我执行rbind时,它会将我的数据框中每列的类更改为字符,并且我无法按照数字的方式对它们进行操作.有没有办法做到这一点,不涉及写出每个元素的类?

谢谢

r rbind

3
推荐指数
1
解决办法
1963
查看次数

R:`rbind`,列表示绑定

我想要rbind两个数据帧,在结果data.frame中有一个额外的列,指示哪个行来自哪个data.frame.例如,

top <- mtcars[1:16, ]
bottom <- mtcars[17:32, ]

rbind(top, bottom)
Run Code Online (Sandbox Code Playgroud)

这会给我,

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3 …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation dataframe rbind

3
推荐指数
1
解决办法
113
查看次数