R:如何从 table 中复制一个值并将其粘贴到指定行号范围内的所有行中?

R: How do I copy a value from a table and paste it into all rows within a specified row number range?

我目前面临的问题是,我根据 table 中特定值的位置生成了行号列表。如下:

row_values <- which(table[,1] == "place of work :")

这给我留下了一个包含“工作地点”的所有行号的列表:

[1]     1   406   811  1216  1621  2026  2431  2836  3241  3646  4051  4456  4861  5266  5671  6076  6481  6886  7291  7696  8101  8506  8911  9316  9721 10126
[27] 10531 10936 11341 11746 12151 12556

一共32个条目。然后我还有另一个 table,其中包含许多代码(总共 32 个):

Area Code (Origin)
 [1,] "E41000293"       
 [2,] "E41000294"       
 [3,] "E41000295"       
 [4,] "E41000296"       
 [5,] "E41000297"       
 [6,] "E41000298"       
 [7,] "E41000299"       
 [8,] "E41000300"       
 [9,] "E41000301"       
[10,] "E41000302"       
[11,] "E41000303"       
[12,] "E41000304"       
[13,] "E41000305"       
[14,] "E41000306"       
[15,] "E41000307"       
[16,] "E41000308"       
[17,] "E41000309"       
[18,] "E41000310"       
[19,] "E41000311"       
[20,] "E41000312"       
[21,] "E41000313"       
[22,] "E41000314"       
[23,] "E41000315"       
[24,] "E41000316"       
[25,] "E41000317"       
[26,] "E41000318"       
[27,] "E41000319"       
[28,] "E41000320"       
[29,] "E41000321"       
[30,] "E41000322"       
[31,] "E41000323"       
[32,] "E41000324"

我需要找到一种方法将这些“区号(原点)”值粘贴到原始 table 中 row_values 之间的每一行中,如图所示。这些将位于我称为“区号(目的地)”的空白栏中。即,E41000293 应位于从 1 到 405 的每一行的区号目的地列中,E41000294 应位于 406 到 810 等。

我将不胜感激,因为我不知道如何最好地解决这个问题。

谢谢, 乔

您可以巧妙地使用 cumsum 来实现这一点:

library(dplyr)
table %>%
  group_by(grp = cumsum(text == "place of work :")) %>% #change "text" to your column name
  mutate(Area_Code = Area[grp,]) %>% #change Area to your table name
  ungroup() %>%
  select(-grp)

剩下要做的就是更改 table 名称和列名称以适应您的问题。

应该这样做:

for (i in 1:length(row_values)) {
  
  if (i == length(row_values)-1) {
    table[c(row_values[i]:(row_values[i+1])),'Area Codes (Destinations)'] = Areacode[i]
  }  else if (i <length(row_values)-1)) {
    table[c(row_values[i]:(row_values[i+1]-1)),'Area Codes (Destinations)'] = Areacode[i]
  }else{}
}