【问题标题】:R: Combine columns based on different information in another column of a dataframeR:根据数据框另一列中的不同信息组合列
【发布时间】:2014-10-06 20:50:31
【问题描述】:

我正在尝试为以下数据操作目的找到一种更简单的方法。数据框是这样的:

"object"    "Date_In"   "Date_out"  "label" "room"  "test"
"1" "LEU_A" 6   9   "Up"    "11z"   "c"
"2" "LEU_A" 1   10  "Down"  "14x"   "c"
"3" "LEU_B" 6   8   "Up"    "11z"   "a1"
"4" "LEU_B" 10  13  "Down"  "14x"   "a1"
"5" "ALL_A" 7   8   "Up"    "11z"   "c"
"6" "ALL_A" 1   26  "Down"  "1g"    "c"
"7" "CLMIA_A"   5   15  "Up"    "11z"   "a2"
"8" "CLMIA_A"   10  10  "Down"  "14x"   "a2"
"9" "CLMIA_A"   10  12  "Down"  "13w"   "a2"

对于所有带有“向上”标签的行(在“标签”列中),我会将其与具有相同对象名称但带有“向下”标签的每一行结合起来。生成的新行(最好在新表中)应该有一个列,其中包含来自向上标记行的“Date In”和来自向下标记行的“Room”。示例结果数据框可能如下所示:

"object"    "Date_In_Room"
"1" "LEU_A" "6_14x"
"2" "LEU_B" "6_14x" 
"3" "ALL_A" "7_1g"
"4" "CLMIA_A"   "5_14x"
"5" "CLMIA_A"   "5_13w"

请注意,一个标有“向上”的样本可能有多个相关的“向下”标记行,我想包括所有这些行。我可以先将上下行分开,然后在数据框中逐行循环,但这可能很耗时,尤其是当我有数百个对象时。如果您有更简单的方法,请告诉我:)

非常感谢您的阅读。感谢您的帮助。

海伦

【问题讨论】:

    标签: r data-manipulation


    【解决方案1】:
    library(data.table)
    DT <- as.data.table(your_data_frame)
    
    RESULTS <- DT[, list(Date_In[label=="Up"], room[label=="Down"]), keyby=object]
    
    
    RESULTS
        object V1  V2
    1:   ALL_A  7  1g
    2: CLMIA_A  5 14x
    3: CLMIA_A  5 13w
    4:   LEU_A  6 14x
    5:   LEU_B  6 14x
    

    【讨论】:

    • 嗨@Ricardo Saporta,你的方法效果很好!非常感谢。我现在正在研究这个包。
    猜你喜欢
    • 2016-12-09
    • 2021-09-24
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2021-11-01
    • 2019-12-18
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多