根据特定列,用其他列的值填充dataframe列

根据特定列,用其他列的值填充dataframe列,r,dataframe,R,Dataframe,我的dataframe看起来像: 我尝试添加一个新列,并用每行的列号(间隔+3)值填充它 例如,如果interval=3,我想得到DF[,3+3] 我试过这个,但没用: DF$new_col <- DF[,DF$intervals[]+3] DF$new\u col尽管问题的描述并不完全清楚。如果基于循环的解决方案解决了您的查询,请仍然检查以下以获得基于循环的解决方案。请注意,由于没有提供可复制的数据,我为此生成了一个虚拟数据 > df<-data.frame(D1=c(2

我的
dataframe
看起来像:

我尝试添加一个新列,并用每行的列号(间隔+3)值填充它

例如,如果
interval=3
,我想得到
DF[,3+3]

我试过这个,但没用:

DF$new_col <- DF[,DF$intervals[]+3]

DF$new\u col尽管问题的描述并不完全清楚。如果基于循环的解决方案解决了您的查询,请仍然检查以下
以获得
基于循环的解决方案。请注意,由于没有提供可复制的数据,我为此生成了一个虚拟数据

> df<-data.frame(D1=c(2,8,1,5,2),D2=c(7,3,5,6,8),D3=c(9,6,4,1,0),D4=c(12,20,61,80,91),Interval=c(1,2,1,0,1))
> df
  D1 D2 D3 D4 Interval
1  2  7  9 12        1
2  8  3  6 20        2
3  1  5  4 61        1
4  5  6  1 80        0
5  2  8  0 91        1
> for (i in 1:nrow(df)){
+ df[i,6]<-df[i,df$Interval[i]+3]
+ }
> df
  D1 D2 D3 D4 Interval V6
1  2  7  9 12        1 12
2  8  3  6 20        2  2
3  1  5  4 61        1 61
4  5  6  1 80        0  1
5  2  8  0 91        1 91
>测向
D1 D2 D3 D4间隔
1  2  7  9 12        1
2  8  3  6 20        2
3  1  5  4 61        1
4  5  6  1 80        0
5  2  8  0 91        1
>适用于(i/1:nrow(df)){
+df[i,6]df
D1 D2 D3 D4间隔V6
1  2  7  9 12        1 12
2  8  3  6 20        2  2
3  1  5  4 61        1 61
4  5  6  1 80        0  1
5  2  8  0 91        1 91

我不确定它有多快,但这里有一个使用
split
mapply
的解决方案

一些示例数据:

set.seed(1)
df <- data.frame(var1 = 1:10,
                 var2 = 11:20,
                 var3 = 21:30,
                 intervals = sample(0:2, 10, replace = T))

   var1 var2 var3 intervals
1     1   11   21         0
2     2   12   22         1
3     3   13   23         1
4     4   14   24         2
5     5   15   25         0
6     6   16   26         2
7     7   17   27         2
8     8   18   28         1
9     9   19   29         1
10   10   20   30         0
现在,我们将
数据拆分为
间隔的每个值的子集

df1 <- split(df, df$intervals)
最后,通过使用
unlist
将值反馈回原始的排序数据帧

df$new <- unlist(newvalues)

因此,对于
interval==3
,您希望获得列
solarNoon
DF$new\u col=DF[1:nrow(DF),DF$interval+3]
的值,请以纯文本形式提供示例(例如使用
dput
)而不是图片。对于SO社区和搜索引擎来说,这更容易回答问题efficient@Emmanuel-林:很抱歉,这是我在这里的第一篇帖子,但我会考虑你的评论time@LAP没错,新列将根据中的值获取以下列中的值:午夜、日出、日光、日落、夜晚、昨夜列“Interval”列。如果Interval==3,我想得到solarNoon列的值,如果Interval==2,我得到sunrise的值,等等。谢谢你的回答,这正是我想要的,但由于数据帧非常大,我想避免使用for循环。
newvalues <- mapply(function(x, y){
  x[, y]
}, df1, unique(df$intervals)+1)
df$new <- unlist(newvalues)
   var1 var2 var3 intervals new
1     1   11   21         0   1
5     5   15   25         0   5
10   10   20   30         0  10
2     2   12   22         1  12
3     3   13   23         1  13
8     8   18   28         1  18
9     9   19   29         1  19
4     4   14   24         2  24
6     6   16   26         2  26
7     7   17   27         2  27