【问题标题】:R refer to vector to create a new column in a MatrixR 引用向量以在 Matrix 中创建新列
【发布时间】:2018-06-15 10:05:28
【问题描述】:

我需要在 R 中编写一个函数,该函数从矩阵中的列中提取字符串段,并用找到的数字替换创建的新列,该数字指的是向量并给出数字。

在矩阵的第 0 列中,有“ind1.pt1”、“ind2.pt1”、、、“ind1.pt2”等字符串。我想提取“pt_”字符串并引用一个向量,其中“pt-”字符串引用一个 ID 号。我想要矩阵中的一个新列,其中包含“pt-”字符串的特定 ID。

矩阵尺寸 = 49140 x 79 矢量长度 = 819

> DIDconcat7[1:10,0:2]
       info var2
ind1.pt1      1   NA
ind2.pt1  10009   NA
ind3.pt1     60   NA
ind4.pt1     60   NA
ind5.pt1     60   NA
ind6.pt1     60   NA
ind7.pt1     24   NA
ind8.pt1     60   NA
ind9.pt1     60   NA
ind10.pt1    60   NA 

> ID[1:10]
  pt1   pt2   pt3   pt4   pt5   pt6   pt7   pt8   pt9  pt10 
10009 10017 10025 10041 10059 10067 10075 10083 10091 10116 

期望的输出是:

           info ID
ind1.pt1      1   10009 
ind2.pt1  10009   10009 
ind3.pt1     60   10009 
ind4.pt1     60   10009 
ind5.pt1     60   10009 
ind6.pt1     60   10009 
ind7.pt1     24   10009 
ind8.pt1     60   10009 
ind9.pt1     60   10009 
ind10.pt1    60   10009 
....
ind1.pt2    60   10017
ind1.pt3    60   10025 

【问题讨论】:

  • 请提供一些示例数据以及所需的输出。
  • 欢迎来到 SO!请阅读How to Ask 并提供minimal reproducible example
  • 希望我已经完成了你的要求,对不起,我是 R 和 Stackoverflow 的初学者!

标签: r matrix vector


【解决方案1】:

你可以这样做:

ID <- c(10009, 10017, 10025, 10041, 10059, 10067, 10075, 10083, 10091, 10116) 
names(ID) <- paste0("pt", 1:10)
ID

DIDconcat <- data.frame(info=sample(20:99, 10), 
   row.names = paste0("ind", 1:10, ".pt", rep(1:3, times=c(3, 5, 2))))
DIDconcat
rownames(DIDconcat)
IDind <- sub("^.*\\.", "", rownames(DIDconcat))
DIDconcat$ID <- ID[IDind]
DIDconcat

这是使用 sub() 来操作数据框的行名 rownames(DIDconcat)。在此之后,您可以将结果用作ID 的索引:DIDconcat$ID &lt;- ID[result]
一行中的精华部分:

DIDconcat$ID <- ID[sub("^.*\\.", "", rownames(DIDconcat))]

【讨论】:

  • 谢谢,请问我该如何处理整个 49140 行的矩阵?
  • 我的解决方案取决于你的数据框 DIDconcat 的行数。
猜你喜欢
  • 2018-04-20
  • 2021-11-27
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 2021-09-05
  • 2011-02-07
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多