R语言 选择一个连续的数据范围,使用开始列和结束列的名称框定列

weylhg0b  于 2023-11-14  发布在  其他
关注(0)|答案(6)|浏览(125)

我尝试使用列名间隔来划分data.frame的列。
例如,data.frameA

  1. A
  2. ID1 ID2 ID3
  3. 1 5 01901
  4. 2 5 01902

字符串
例如,我想用A的列创建变量b:

  1. b=A[,"ID2":"ID3"]


错误“ID 1”:“ID 3”:NA/NaN参数此外:警告消息:一曰:在[.data.frame(A,,“ID 1”:“ID 3”)中:通过强制引入的NA 2:在[.data.frame(A,,,“ID 1”:“ID 3”)中:通过强制引入的NA
我想要什么解决方案:

  1. b
  2. ID2 ID3
  3. 5 01901
  4. 5 01902


当我把列的索引,它的工作。但当我使用列的名称,如上所述,不工作。

mm5n2pyu

mm5n2pyu1#

base R的data.frame中有两种方法:

  • 命名向量列子集
  • 区间法

命名向量列子集

首先,已知名称的子集:

  1. b = A[, c('ID2', 'ID3')]

字符串

区间方法

第二,当已知列相同时,按区间划分子集:

  1. # Column Variables
  2. colvars = names(A)
  3. # Get the first ID
  4. start_loc = match("ID1",colvars)
  5. # Get the second ID
  6. end_loc = match("ID3",colvars)
  7. # Subset range
  8. b = A[,start_loc:end_loc]

展开查看全部
k3fezbri

k3fezbri2#

如果您不限于data.frame,则可以将其转换为data.table,然后您的公式将起作用:

  1. data.table::setDT(A)[, ID2:ID3, with=F]
  2. ID2 ID3
  3. 1: 5 1901
  4. 2: 5 1902

字符串

uqxowvwt

uqxowvwt3#

您希望使用列名而不是数字来选择列间隔,对吗?为什么不:
第一个月
> b
# ID2 ID3
# 1 5 1901
# 2 5 1902

bsxbgnwa

bsxbgnwa4#

使用c()函数,则在使用列名时有效

  1. > A <- data.frame(ID1=c(1,1),ID2=c(5,5),ID3=c(01901,01902))
  2. > A
  3. # ID1 ID2 ID3
  4. # 1 1 5 1901
  5. # 2 1 5 1902
  6. > b <- A[,c(2:3)]
  7. > b
  8. # ID2 ID3
  9. # 1 5 1901
  10. # 2 5 1902
  11. > b1 <- A[,c("ID2","ID3")]
  12. > b1
  13. # ID2 ID3
  14. # 1 5 1901
  15. # 2 5 1902
  16. > b2 <- A[,2:3]
  17. > b2
  18. # ID2 ID3
  19. # 1 5 1901
  20. # 2 5 1902

字符串

展开查看全部
rm5edbpk

rm5edbpk5#

如果我们想使用dplyr

  1. # create data frame A
  2. A <- data.frame (ID1 = c("1", "2"),
  3. ID2 = c("5", "5"),
  4. ID3 = c("01901", "01902")
  5. )
  6. # print A
  7. A
  8. # get data frame B
  9. B <- A %>% select(ID2:ID3)
  10. # print B
  11. B

字符串

展开查看全部
chy5wohz

chy5wohz6#

基本的R subset函数可以做到这一点

  1. subset(A, ID2:ID3)

字符串

相关问题