我有以下数据:
df<-read.table(text= "Group Time income
A 1 20
M 3 14
A 2 11
P 2 22
Q 3 21
Q 1 24
M 2 22
P 2 15",h=T)
我想生成两个如下的类:
所有组的时间1和仅A和M组的时间3。这将生成“类别1”列。
所有组的时间2和仅P和Q组的时间3。这将生成类2的列。 输出为:
Group Time Income Class1 Class2
A 1 20 20 11
M 3 14 24 22
A 2 11 14 22
P 2 22 15
Q 3 21 21
Q 1 24
M 2 22
P 2 15
作为R的新手,我无法找到解决方案。任何帮助都将得到
答案 0 :(得分:0)
这有点尴尬,因为我们要求T(n) = O(n log(n))
按位置连接,当派生列表似乎不再与我们要附加它们的行相对应时。一种实现方法是为原始数据的每一行,派生列表的每一行提供一个list = [1,2,3,4]
i = 1
while i in list:
i += 1
print(i)
,并基于该dplyr
进行left_join。
rowid
在R中,rowid
是一个特殊值,它是不具有显式值的数据的占位符。当您要控制是否将丢失的数据包括在计算中或从计算中排除时,它非常方便。如果这是处理的最后一步,并且要输出可读的表,则可以用空的“”字符替换NA,但这会将数据列更改为字符数据,这对于任何进一步的计算都是不便的。
答案 1 :(得分:0)
这是获取输出的一种方法,尽管不清楚Class1和Class2中的值的合理排序是什么。
df<-read.table(text= "Group Time income
A 1 20
M 3 14
A 2 11
P 2 22
Q 3 21
Q 1 24
M 2 22
P 2 15",h=T)
library(tidyverse)
df %>%
mutate(
Class1 = (Time == 1) | ((Time == 3) & Group %in% c("A", "M")),
Class2 = (Time == 2) | ((Time == 3) & Group %in% c("P", "Q"))
) %>%
mutate_at(
.vars = vars(Class1, Class2),
.funs = ~ income[.x] %>% `length<-`(length(.x))
)
#> Group Time income Class1 Class2
#> 1 A 1 20 20 11
#> 2 M 3 14 14 22
#> 3 A 2 11 24 21
#> 4 P 2 22 NA 22
#> 5 Q 3 21 NA 15
#> 6 Q 1 24 NA NA
#> 7 M 2 22 NA NA
#> 8 P 2 15 NA NA
由reprex package(v0.2.1)于2019-05-17创建