[英]Aggregate as new column in R
輸入:
Time,id1,id2
22:30,1,0
22:32,2,1
22:33,1,0
22:34,2,1
期望的輸出
Time,Time2,id1,id2
22:30,22:33,1,0
22:32,22:34,2,1
通過我的代碼輸出
Time,id1,id2
22:30,22:33,1,0
22:32,22:34,2,1
我應該對代碼的aggregate(Time~,df,FUN=toString)
進行什么更改aggregate(Time~,df,FUN=toString)
我的id1和id2一起是鍵,並且每個鍵的輸入和輸出時間都是。 我需要獲取時間和超時作為單獨的列值。 當前它們在“時間”列中。
我也用awk嘗試過。
如果您不想使用任何軟件包,則可以使用:
df <- aggregate(Time~.,df,FUN=toString)
df
#output
id1 id2 Time
1 0 22:30, 22:33
2 1 22:32, 22:34
df$Time2 <- lapply(strsplit(as.character(df$Time), ","),"[", 2)
df$Time <- lapply(strsplit(as.character(df$Time), ","),"[", 1)
df
#output
id1 id2 Time Time2
1 0 22:30 22:33
2 1 22:32 22:34
用awk
$ cat time.awk
BEGIN {
FS = OFS = ","
}
function in_time() {
n++
store[id1, id2] = n
itime[n] = time; iid1[n] = id1; iid2[n] = id2
}
function out_time( i) {
i = store[id1, id2]
otime[i] = time
}
NR > 1 {
time = $1; id1 = $2; id2 = $3
if ((id1, id2) in store) out_time()
else in_time()
}
END {
print "Time,id1,id2"
for (i = 1; i <= n; i++)
print itime[i], otime[i], iid1[i], iid2[i]
}
用法:
awk -f time.awk file.dat
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.