簡體   English   中英

匯總為R中的新列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM