我的dataframe
如下:
我尝试添加新列,并为每行填充列号的值(间隔+ 3)。
例如,如果intervals = 3
,我想获取DF[,3+3]
的值
我尝试了这个,但是没用:
DF$new_col <- DF[,DF$intervals[]+3]
答案 0 :(得分:0)
尽管从问题中不能完全清楚地描述问题。如果解决了您的查询,仍请检查以下基于for
的基于循环的解决方案。请注意,由于未提供可复制的数据,因此我为此目的生成了一个虚拟数据。
> 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
答案 1 :(得分:0)
我不确定速度有多快,但这是使用from multiprocessing import Queue, Value, Process
import queue
def creator(urls, closing_condition):
"""Parse page and put urls in given Queue."""
while (not closing_condition):
created_urls = create_url_method()
[urls.put(url) for url in created_urls]
def consumer(urls, closing_condition):
"""Consume urls in given Queue."""
while (not closing_condition):
try:
store_url(urls.get(timeout=1))
except queue.Empty:
pass
urls = Queue()
semaphore = Value('d', 0)
creators_number = 2
consumers_number = 2
creators = [
Process(target=creator, args=(urls, semaphore))
for i in range(creators_number)
]
consumers = [
Process(target=consumer, args=(urls, semaphore))
for i in range(consumers_number)
]
[p.start() for p in creators + consumer]
[p.join() for p in creators + consumer]
和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
对数据框进行排序:
intervals
现在,我们将df <- df[order(df$intervals),]
var1 var2 var3 intervals
1 1 11 21 0
5 5 15 25 0
10 10 20 30 0
2 2 12 22 1
3 3 13 23 1
8 8 18 28 1
9 9 19 29 1
4 4 14 24 2
6 6 16 26 2
7 7 17 27 2
的每个值split
划分为子集。
intervals
现在,我们使用df1 <- split(df, df$intervals)
同时遍历子集列表和向量mapply
(对于您来说,它为+3)以选择正确的值。
unique(df$intervals)+1
最后,使用newvalues <- mapply(function(x, y){
x[, y]
}, df1, unique(df$intervals)+1)
将值反馈回原始的,已排序的数据帧。
unlist
结果:
df$new <- unlist(newvalues)