df <- structure(list(first_id = c("CHEFxx", "NBTFAxx", "CYACTxx", "CYCAUSxx", 
                                  "CYDEBxx", "CYTPTOxx", "CJACTxx", "CJDEBxx", "CJFINxx", "HODANxx", 
                                  "HODCHOxx", "HODCOxx", "HODEMPxx", "HODENFxx", "HODINDxx", "HODIPxx", 
                                  "HODLNxx", "HODNIVxx", "HODPRIxx", "HODPUBxx", "HODSECTxx", 
                                  "HODSEXxx", "QUIRECOITMxx", "QUIRECOITxx"), desc = c("(xx = 1 à 20)", 
                                                                                       "(xx = 1 à 20)", "(xx = 2 à 16)", 
                                                                                       "(xx = 2 à 16)", "(xx = 2 à 16)", 
                                                                                       "(xx = 2 à 16)", "(xx = 1 à 15)", 
                                                                                       "(xx = 1 à 15)", "(xx = 1 à 15)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                                       "(xx = 1 à 20)", "(xx = 1 à 12)"
                                  )), row.names = c(NA, -24L), class = "data.frame"
                                  )

我有一个数据集,其中每个观察结果都以"xx"结尾.对于这些xx中的每一个,在"desc"列中都有一个与之相关联的数字范围,其中写着"(xx=iàj)".对于这些观察值中的每一个,我想将观察值k乘以"desc"中的间隔长度,并将"first_id"中的每个xx替换为数字,每次从1开始递增.因此,我希望变量first_id有:

CHEF1 
CHEF2
...
CHEF20
NBTFA1
...
NBTFA20
CYACT2
...
CYACT16

变量Desc应保持不变,并按每个观察值的原样进行扩展.你能帮我解决这个问题吗?

推荐答案

基座

我们可以使用Map()三次:

fun = \(a, b) {
  X = Map(\(x) x[nchar(x) > 0L], strsplit(b, "\\D+")) |>
    lapply(as.numeric) |> list2DF()
  y = Map(paste0, gsub("xx", "", a), 
      Vectorize( \(from, to) seq(from, to, by = 1))(X[1, ], X[2, ]) ) 
  z = Map(rep, b, 1 + X[2, ] - X[1, ])
  lapply(list(y, z), unlist) |> list2DF()
}
fun(df$first_id, df$desc) |> setNames(colnames(df))

赠送

        first_id          desc
1          CHEF1 (xx = 1 à 20)
2          CHEF2 (xx = 1 à 20)
3          CHEF3 (xx = 1 à 20)
4          CHEF4 (xx = 1 à 20)
5          CHEF5 (xx = 1 à 20)
6          CHEF6 (xx = 1 à 20)
7          CHEF7 (xx = 1 à 20)
8          CHEF8 (xx = 1 à 20)
9          CHEF9 (xx = 1 à 20)
10        CHEF10 (xx = 1 à 20)
11        CHEF11 (xx = 1 à 20)
12        CHEF12 (xx = 1 à 20)
13        CHEF13 (xx = 1 à 20)
14        CHEF14 (xx = 1 à 20)
15        CHEF15 (xx = 1 à 20)
16        CHEF16 (xx = 1 à 20)
17        CHEF17 (xx = 1 à 20)
18        CHEF18 (xx = 1 à 20)
19        CHEF19 (xx = 1 à 20)
20        CHEF20 (xx = 1 à 20)
21        NBTFA1 (xx = 1 à 20)
22        NBTFA2 (xx = 1 à 20)
23        NBTFA3 (xx = 1 à 20)
24        NBTFA4 (xx = 1 à 20)
25        NBTFA5 (xx = 1 à 20)
26        NBTFA6 (xx = 1 à 20)
27        NBTFA7 (xx = 1 à 20)
28        NBTFA8 (xx = 1 à 20)
29        NBTFA9 (xx = 1 à 20)
30       NBTFA10 (xx = 1 à 20)
31       NBTFA11 (xx = 1 à 20)
32       NBTFA12 (xx = 1 à 20)
33       NBTFA13 (xx = 1 à 20)
34       NBTFA14 (xx = 1 à 20)
35       NBTFA15 (xx = 1 à 20)
36       NBTFA16 (xx = 1 à 20)
37       NBTFA17 (xx = 1 à 20)
38       NBTFA18 (xx = 1 à 20)
39       NBTFA19 (xx = 1 à 20)
40       NBTFA20 (xx = 1 à 20)
41        CYACT2 (xx = 2 à 16)
42        CYACT3 (xx = 2 à 16)
43        CYACT4 (xx = 2 à 16)
44        CYACT5 (xx = 2 à 16)
45        CYACT6 (xx = 2 à 16)
46        CYACT7 (xx = 2 à 16)
47        CYACT8 (xx = 2 à 16)
48        CYACT9 (xx = 2 à 16)
49       CYACT10 (xx = 2 à 16)
50       CYACT11 (xx = 2 à 16)
51       CYACT12 (xx = 2 à 16)
52       CYACT13 (xx = 2 à 16)
53       CYACT14 (xx = 2 à 16)
54       CYACT15 (xx = 2 à 16)
55       CYACT16 (xx = 2 à 16)
56       CYCAUS2 (xx = 2 à 16)
57       CYCAUS3 (xx = 2 à 16)
58       CYCAUS4 (xx = 2 à 16)
59       CYCAUS5 (xx = 2 à 16)
60       CYCAUS6 (xx = 2 à 16)
61       CYCAUS7 (xx = 2 à 16)
62       CYCAUS8 (xx = 2 à 16)
63       CYCAUS9 (xx = 2 à 16)
64      CYCAUS10 (xx = 2 à 16)
65      CYCAUS11 (xx = 2 à 16)
66      CYCAUS12 (xx = 2 à 16)
67      CYCAUS13 (xx = 2 à 16)
68      CYCAUS14 (xx = 2 à 16)
69      CYCAUS15 (xx = 2 à 16)
70      CYCAUS16 (xx = 2 à 16)
71        CYDEB2 (xx = 2 à 16)
72        CYDEB3 (xx = 2 à 16)
73        CYDEB4 (xx = 2 à 16)
74        CYDEB5 (xx = 2 à 16)
75        CYDEB6 (xx = 2 à 16)
76        CYDEB7 (xx = 2 à 16)
77        CYDEB8 (xx = 2 à 16)
78        CYDEB9 (xx = 2 à 16)
79       CYDEB10 (xx = 2 à 16)
80       CYDEB11 (xx = 2 à 16)
81       CYDEB12 (xx = 2 à 16)
82       CYDEB13 (xx = 2 à 16)
83       CYDEB14 (xx = 2 à 16)
84       CYDEB15 (xx = 2 à 16)
85       CYDEB16 (xx = 2 à 16)
86       CYTPTO2 (xx = 2 à 16)
87       CYTPTO3 (xx = 2 à 16)
88       CYTPTO4 (xx = 2 à 16)
89       CYTPTO5 (xx = 2 à 16)
90       CYTPTO6 (xx = 2 à 16)
91       CYTPTO7 (xx = 2 à 16)
92       CYTPTO8 (xx = 2 à 16)
93       CYTPTO9 (xx = 2 à 16)
94      CYTPTO10 (xx = 2 à 16)
95      CYTPTO11 (xx = 2 à 16)
96      CYTPTO12 (xx = 2 à 16)
97      CYTPTO13 (xx = 2 à 16)
98      CYTPTO14 (xx = 2 à 16)
99      CYTPTO15 (xx = 2 à 16)
100     CYTPTO16 (xx = 2 à 16)
101       CJACT1 (xx = 1 à 15)
102       CJACT2 (xx = 1 à 15)
103       CJACT3 (xx = 1 à 15)
104       CJACT4 (xx = 1 à 15)
105       CJACT5 (xx = 1 à 15)
106       CJACT6 (xx = 1 à 15)
107       CJACT7 (xx = 1 à 15)
108       CJACT8 (xx = 1 à 15)
109       CJACT9 (xx = 1 à 15)
110      CJACT10 (xx = 1 à 15)
111      CJACT11 (xx = 1 à 15)
112      CJACT12 (xx = 1 à 15)
113      CJACT13 (xx = 1 à 15)
114      CJACT14 (xx = 1 à 15)
115      CJACT15 (xx = 1 à 15)
116       CJDEB1 (xx = 1 à 15)
117       CJDEB2 (xx = 1 à 15)
118       CJDEB3 (xx = 1 à 15)
119       CJDEB4 (xx = 1 à 15)
120       CJDEB5 (xx = 1 à 15)
121       CJDEB6 (xx = 1 à 15)
122       CJDEB7 (xx = 1 à 15)
123       CJDEB8 (xx = 1 à 15)
124       CJDEB9 (xx = 1 à 15)
125      CJDEB10 (xx = 1 à 15)
126      CJDEB11 (xx = 1 à 15)
127      CJDEB12 (xx = 1 à 15)
128      CJDEB13 (xx = 1 à 15)
129      CJDEB14 (xx = 1 à 15)
130      CJDEB15 (xx = 1 à 15)
131       CJFIN1 (xx = 1 à 15)
132       CJFIN2 (xx = 1 à 15)
133       CJFIN3 (xx = 1 à 15)
134       CJFIN4 (xx = 1 à 15)
135       CJFIN5 (xx = 1 à 15)
136       CJFIN6 (xx = 1 à 15)
137       CJFIN7 (xx = 1 à 15)
138       CJFIN8 (xx = 1 à 15)
139       CJFIN9 (xx = 1 à 15)
140      CJFIN10 (xx = 1 à 15)
141      CJFIN11 (xx = 1 à 15)
142      CJFIN12 (xx = 1 à 15)
143      CJFIN13 (xx = 1 à 15)
144      CJFIN14 (xx = 1 à 15)
145      CJFIN15 (xx = 1 à 15)
146       HODAN1 (xx = 1 à 12)
147       HODAN2 (xx = 1 à 12)
148       HODAN3 (xx = 1 à 12)
149       HODAN4 (xx = 1 à 12)
150       HODAN5 (xx = 1 à 12)
151       HODAN6 (xx = 1 à 12)
152       HODAN7 (xx = 1 à 12)
153       HODAN8 (xx = 1 à 12)
154       HODAN9 (xx = 1 à 12)
155      HODAN10 (xx = 1 à 12)
156      HODAN11 (xx = 1 à 12)
157      HODAN12 (xx = 1 à 12)
158      HODCHO1 (xx = 1 à 12)
159      HODCHO2 (xx = 1 à 12)
160      HODCHO3 (xx = 1 à 12)
161      HODCHO4 (xx = 1 à 12)
162      HODCHO5 (xx = 1 à 12)
163      HODCHO6 (xx = 1 à 12)
164      HODCHO7 (xx = 1 à 12)
165      HODCHO8 (xx = 1 à 12)
166      HODCHO9 (xx = 1 à 12)
167     HODCHO10 (xx = 1 à 12)
168     HODCHO11 (xx = 1 à 12)
169     HODCHO12 (xx = 1 à 12)
170       HODCO1 (xx = 1 à 12)
171       HODCO2 (xx = 1 à 12)
172       HODCO3 (xx = 1 à 12)
173       HODCO4 (xx = 1 à 12)
174       HODCO5 (xx = 1 à 12)
175       HODCO6 (xx = 1 à 12)
176       HODCO7 (xx = 1 à 12)
177       HODCO8 (xx = 1 à 12)
178       HODCO9 (xx = 1 à 12)
179      HODCO10 (xx = 1 à 12)
180      HODCO11 (xx = 1 à 12)
181      HODCO12 (xx = 1 à 12)
182      HODEMP1 (xx = 1 à 12)
183      HODEMP2 (xx = 1 à 12)
184      HODEMP3 (xx = 1 à 12)
185      HODEMP4 (xx = 1 à 12)
186      HODEMP5 (xx = 1 à 12)
187      HODEMP6 (xx = 1 à 12)
188      HODEMP7 (xx = 1 à 12)
189      HODEMP8 (xx = 1 à 12)
190      HODEMP9 (xx = 1 à 12)
191     HODEMP10 (xx = 1 à 12)
192     HODEMP11 (xx = 1 à 12)
193     HODEMP12 (xx = 1 à 12)
194      HODENF1 (xx = 1 à 12)
195      HODENF2 (xx = 1 à 12)
196      HODENF3 (xx = 1 à 12)
197      HODENF4 (xx = 1 à 12)
198      HODENF5 (xx = 1 à 12)
199      HODENF6 (xx = 1 à 12)
200      HODENF7 (xx = 1 à 12)
201      HODENF8 (xx = 1 à 12)
202      HODENF9 (xx = 1 à 12)
203     HODENF10 (xx = 1 à 12)
204     HODENF11 (xx = 1 à 12)
205     HODENF12 (xx = 1 à 12)
206      HODIND1 (xx = 1 à 12)
207      HODIND2 (xx = 1 à 12)
208      HODIND3 (xx = 1 à 12)
209      HODIND4 (xx = 1 à 12)
210      HODIND5 (xx = 1 à 12)
211      HODIND6 (xx = 1 à 12)
212      HODIND7 (xx = 1 à 12)
213      HODIND8 (xx = 1 à 12)
214      HODIND9 (xx = 1 à 12)
215     HODIND10 (xx = 1 à 12)
216     HODIND11 (xx = 1 à 12)
217     HODIND12 (xx = 1 à 12)
218       HODIP1 (xx = 1 à 12)
219       HODIP2 (xx = 1 à 12)
220       HODIP3 (xx = 1 à 12)
221       HODIP4 (xx = 1 à 12)
222       HODIP5 (xx = 1 à 12)
223       HODIP6 (xx = 1 à 12)
224       HODIP7 (xx = 1 à 12)
225       HODIP8 (xx = 1 à 12)
226       HODIP9 (xx = 1 à 12)
227      HODIP10 (xx = 1 à 12)
228      HODIP11 (xx = 1 à 12)
229      HODIP12 (xx = 1 à 12)
230       HODLN1 (xx = 1 à 12)
231       HODLN2 (xx = 1 à 12)
232       HODLN3 (xx = 1 à 12)
233       HODLN4 (xx = 1 à 12)
234       HODLN5 (xx = 1 à 12)
235       HODLN6 (xx = 1 à 12)
236       HODLN7 (xx = 1 à 12)
237       HODLN8 (xx = 1 à 12)
238       HODLN9 (xx = 1 à 12)
239      HODLN10 (xx = 1 à 12)
240      HODLN11 (xx = 1 à 12)
241      HODLN12 (xx = 1 à 12)
242      HODNIV1 (xx = 1 à 12)
243      HODNIV2 (xx = 1 à 12)
244      HODNIV3 (xx = 1 à 12)
245      HODNIV4 (xx = 1 à 12)
246      HODNIV5 (xx = 1 à 12)
247      HODNIV6 (xx = 1 à 12)
248      HODNIV7 (xx = 1 à 12)
249      HODNIV8 (xx = 1 à 12)
250      HODNIV9 (xx = 1 à 12)
251     HODNIV10 (xx = 1 à 12)
252     HODNIV11 (xx = 1 à 12)
253     HODNIV12 (xx = 1 à 12)
254      HODPRI1 (xx = 1 à 12)
255      HODPRI2 (xx = 1 à 12)
256      HODPRI3 (xx = 1 à 12)
257      HODPRI4 (xx = 1 à 12)
258      HODPRI5 (xx = 1 à 12)
259      HODPRI6 (xx = 1 à 12)
260      HODPRI7 (xx = 1 à 12)
261      HODPRI8 (xx = 1 à 12)
262      HODPRI9 (xx = 1 à 12)
263     HODPRI10 (xx = 1 à 12)
264     HODPRI11 (xx = 1 à 12)
265     HODPRI12 (xx = 1 à 12)
266      HODPUB1 (xx = 1 à 12)
267      HODPUB2 (xx = 1 à 12)
268      HODPUB3 (xx = 1 à 12)
269      HODPUB4 (xx = 1 à 12)
270      HODPUB5 (xx = 1 à 12)
271      HODPUB6 (xx = 1 à 12)
272      HODPUB7 (xx = 1 à 12)
273      HODPUB8 (xx = 1 à 12)
274      HODPUB9 (xx = 1 à 12)
275     HODPUB10 (xx = 1 à 12)
276     HODPUB11 (xx = 1 à 12)
277     HODPUB12 (xx = 1 à 12)
278     HODSECT1 (xx = 1 à 12)
279     HODSECT2 (xx = 1 à 12)
280     HODSECT3 (xx = 1 à 12)
281     HODSECT4 (xx = 1 à 12)
282     HODSECT5 (xx = 1 à 12)
283     HODSECT6 (xx = 1 à 12)
284     HODSECT7 (xx = 1 à 12)
285     HODSECT8 (xx = 1 à 12)
286     HODSECT9 (xx = 1 à 12)
287    HODSECT10 (xx = 1 à 12)
288    HODSECT11 (xx = 1 à 12)
289    HODSECT12 (xx = 1 à 12)
290      HODSEX1 (xx = 1 à 12)
291      HODSEX2 (xx = 1 à 12)
292      HODSEX3 (xx = 1 à 12)
293      HODSEX4 (xx = 1 à 12)
294      HODSEX5 (xx = 1 à 12)
295      HODSEX6 (xx = 1 à 12)
296      HODSEX7 (xx = 1 à 12)
297      HODSEX8 (xx = 1 à 12)
298      HODSEX9 (xx = 1 à 12)
299     HODSEX10 (xx = 1 à 12)
300     HODSEX11 (xx = 1 à 12)
301     HODSEX12 (xx = 1 à 12)
302  QUIRECOITM1 (xx = 1 à 12)
303  QUIRECOITM2 (xx = 1 à 12)
304  QUIRECOITM3 (xx = 1 à 12)
305  QUIRECOITM4 (xx = 1 à 12)
306  QUIRECOITM5 (xx = 1 à 12)
307  QUIRECOITM6 (xx = 1 à 12)
308  QUIRECOITM7 (xx = 1 à 12)
309  QUIRECOITM8 (xx = 1 à 12)
310  QUIRECOITM9 (xx = 1 à 12)
311 QUIRECOITM10 (xx = 1 à 12)
312 QUIRECOITM11 (xx = 1 à 12)
313 QUIRECOITM12 (xx = 1 à 12)
314   QUIRECOIT1 (xx = 1 à 20)
315   QUIRECOIT2 (xx = 1 à 20)
316   QUIRECOIT3 (xx = 1 à 20)
317   QUIRECOIT4 (xx = 1 à 20)
318   QUIRECOIT5 (xx = 1 à 20)
319   QUIRECOIT6 (xx = 1 à 20)
320   QUIRECOIT7 (xx = 1 à 20)
321   QUIRECOIT8 (xx = 1 à 20)
322   QUIRECOIT9 (xx = 1 à 20)
323  QUIRECOIT10 (xx = 1 à 20)
324  QUIRECOIT11 (xx = 1 à 20)
325  QUIRECOIT12 (xx = 1 à 20)
326  QUIRECOIT13 (xx = 1 à 20)
327  QUIRECOIT14 (xx = 1 à 20)
328  QUIRECOIT15 (xx = 1 à 20)
329  QUIRECOIT16 (xx = 1 à 20)
330  QUIRECOIT17 (xx = 1 à 20)
331  QUIRECOIT18 (xx = 1 à 20)
332  QUIRECOIT19 (xx = 1 à 20)
333  QUIRECOIT20 (xx = 1 à 20)

数据

length-corrected toy data

df =structure(list(first_id = c("CHEFxx", "NBTFAxx", "CYACTxx", "CYCAUSxx", 
                                "CYDEBxx", "CYTPTOxx", "CJACTxx", "CJDEBxx", "CJFINxx", "HODANxx", 
                                "HODCHOxx", "HODCOxx", "HODEMPxx", "HODENFxx", "HODINDxx", "HODIPxx", 
                                "HODLNxx", "HODNIVxx", "HODPRIxx", "HODPUBxx", "HODSECTxx", "HODSEXxx", 
                                "QUIRECOITMxx", "QUIRECOITxx"), desc = c("(xx = 1 à 20)", "(xx = 1 à 20)", 
                                                                         "(xx = 2 à 16)", "(xx = 2 à 16)", "(xx = 2 à 16)", "(xx = 2 à 16)", 
                                                                         "(xx = 1 à 15)", "(xx = 1 à 15)", "(xx = 1 à 15)", "(xx = 1 à 12)", 
                                                                         "(xx = 1 à 12)", "(xx = 1 à 12)", "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                         "(xx = 1 à 12)", "(xx = 1 à 12)", "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                         "(xx = 1 à 12)", "(xx = 1 à 12)", "(xx = 1 à 12)", "(xx = 1 à 12)", 
                                                                         "(xx = 1 à 12)", "(xx = 1 à 20)")), row.names = c(NA, -24L), class = "data.frame")

R相关问答推荐

如果索引重复,聚合xts核心数据

r—绘制相交曲线

根据多个条件增加y轴高度以适应geom_text标签

gganimate在使用shadow_mark选项时不保留所有过go 的标记

提取具有连续零值的行,如果它们前面有R中的有效值

在连续尺度上转置标签[瀑布图,R]

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

如何编辑gMarginal背景以匹配绘图背景?

使用R闪光显示所有数据点作为默认设置

根据类别合并(汇总)某些行

Select 季度月值

基于R中的间隔扩展数据集行

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

停止ggplot将多行减少到一行

R中Gamma回归模型均方误差的两种计算方法不一致

我是否可以使用多个变异项来构建顺序列(标记多个问题)

将多个列合并为一个列的有效方法是什么?

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

根据排名的顶点属性调整曲线图布局(&Q)

如何从矩阵绘制环弦图