0
我正在处理数据帧,并且需要提取数据,如下所示:基于数据帧中另一列的另一列中的列提取值R
我有以下数据帧。
a = c(1:40)
b = c(41:80)
c = c(81:120)
d = c('a','b','c','d','e')
e = NA
f = NA
g = NA
df = cbind.data.frame(a,b,c,d,e,f,g)
names(df) = c('1m','2m','3m','reg','1m_comp','2m_comp','3m_comp')
1m 2m 3m reg 1m_comp 2 m_comp 3m_comp
1 41 81 a NA NA NA
2 42 82 b NA NA NA
3 43 83 c NA NA NA
4 44 84 d NA NA NA
5 45 85 e NA NA NA
6 46 86 a NA NA NA
我使用函数内从“1米”,“2米”列填充的值“小样”列如果“REG”列具有一定的值。
我这样做:
df = within(df, {
1m[reg=='a'] <- 1m_comp[reg=='a']
2m[reg=='a'] <- 2m_comp[reg=='a']
3m[reg=='a'] <- 3m_comp[reg=='a']})
,我的工作就有46个+ 46这样的列(列和谱曲)的数据帧。我没有写46行代码,而是尝试了
df = within(df, {
for (i in 1:46) {
str_c(i,'m_comp')[reg=='a'] = str_c(i,'m')[reg=='a']}})
但是,我看不到数据框中的变化。我也没有看到任何错误。
编辑:立即解决!谢谢d.b.
'DF [DF $ REG == “一”,5:7] = DF [DF $ REG == “一”,1:3]' –
是否有可能做到这一点使用列名而不是列号? – NiRa
'df [df $ reg ==“a”,c(“1m_comp”,“2m_comp”,“3m_comp”)] = df [df $ reg ==“a”,c(“1m”,“2m”, “3m”)]' –