【发布时间】:2012-09-24 02:37:18
【问题描述】:
2012-09-24 06:52:00Z 更新
David Robinson 问了一些非常好的问题后,我意识到我最初的问题并不准确。
我将我的问题考虑为一个两步的事情,
首先,我需要查看我的数据以识别只有 time intake_arm_1 的 ids 并创建一个新行,其中只有 id 中的 #、time 中的 v_001_arm_1 和他们在c_n 中的#。为了在他们的t_name 和c_name 之间获得正确的匹配,我使用lookup 表。
其次,我需要在“v_001_arm_1”上的id 内或多或少地执行相同的操作,尽管v_010_arm_1 如果最新的arm 注册了任何ti_all,则按@ 计算这些实例987654335@,并将这些数字写入out_c 和out_c 列。此外,如果最新的 ti_all 不是 NA,我还必须将名称编号从 intake_arm_1 传输到这个新行。
新的v_00n_arm_1的#应该是“当前高亮编号”(例如v_007_arm_1)+1(例如v_008_arm_1)。
我将努力手动制作一个引人注目的示例来说明我的目标。
lookup <- structure(list(c_name = c(1L, 2L, 4L, 5L, 6L, 7L), t_name = structure(1:6, .Label = c("Bob", "Julian", "Mitt", "Ricky", "Tom", "Victor"), class = "factor")), .Names = c("c_name", "t_name"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))
> lookup
c_name t_name
1 1 Bob
2 2 Julian
3 4 Mitt
4 5 Ricky
5 6 Tom
6 7 Victor
mydata <- structure(list(id = c(1L, 1L, 2L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 6L, 7L, 7L, 7L, 7L, 8L, 9L), time = c("intake_arm_1", "v_001_arm_1", "intake_arm_1", "intake_arm_1", "intake_arm_1", "v_001_arm_1", "v_002_arm_1", "v_003_arm_1", "v_004_arm_1", "v_005_arm_1", "v_006_arm_1", "v_007_arm_1", "intake_arm_1", "v_001_arm_1", "intake_arm_1", "intake_arm_1", "v_011_arm_1", "v_012_arm_1", "v_013_arm_1", "intake_arm_1", "intake_arm_1"), dat_all = c(NA, NA, NA, NA, NA, NA, NA, "2012-09-23", "2012-09-23", "2012-09-02", "2012-09-10", "2012-09-23", NA, NA, NA, NA, "2012-09-23", "2012-09-23", "2012-09-23", NA, NA), ti_all = c(NA, NA, NA, NA, NA, NA, NA, 6L, 44L, 33L, NA, 22L, NA, NA, NA, NA, 65L, NA, 10L, NA, NA), ty_all = c(NA, NA, NA, NA, NA, NA, NA, "out_", "out_", "cma_", NA, "cma_", NA, NA, NA, NA, "out_", "out_", "out_", NA, NA), out_c = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), cma_c = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), c_n = c(NA, 1L, NA, NA, NA, NA, NA, 7L, 4L, 7L, NA, 1L, NA, 2L, NA, NA, 7L, 7L, 7L, NA, NA), t_name = c("Tom", NA, "Ricky", "Ricky", "Victor", NA, NA, NA, NA, NA, NA, NA, "Julian", NA, "Julian", "Bob", NA, NA, NA, "Mitt", "Mitt")), .Names = c("id", "time", "dat_all", "ti_all", "ty_all", "out_c", "cma_c", "c_n", "t_name"), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"))
> mydata
id time dat_all ti_all ty_all out_c cma_c c_n t_name
1 1 intake_arm_1 NA NA NA NA NA NA Tom
2 1 v_001_arm_1 NA NA NA NA NA 1 NA
3 2 intake_arm_1 NA NA NA NA NA NA Ricky
4 3 intake_arm_1 NA NA NA NA NA NA Ricky
5 4 intake_arm_1 NA NA NA NA NA NA Victor
6 4 v_001_arm_1 NA NA NA NA NA NA NA
7 4 v_002_arm_1 NA NA NA NA NA NA NA
8 4 v_003_arm_1 2012-09-23 6 out_ NA NA 7 NA
9 4 v_004_arm_1 2012-09-23 44 out_ NA NA 4 NA
10 4 v_005_arm_1 2012-09-02 33 cma_ NA NA 7 NA
11 4 v_006_arm_1 2012-09-10 NA NA NA NA NA NA
12 4 v_007_arm_1 2012-09-23 22 cma_ NA NA 1 NA
13 5 intake_arm_1 NA NA NA NA NA NA Julian
14 5 v_001_arm_1 NA NA NA NA NA 2 NA
15 6 intake_arm_1 NA NA NA NA NA NA Julian
16 7 intake_arm_1 NA NA NA NA NA NA Bob
17 7 v_011_arm_1 2012-09-23 65 out_ NA NA 7 NA
18 7 v_012_arm_1 2012-09-23 NA out_ NA NA 7 NA
19 7 v_013_arm_1 2012-09-23 10 out_ NA NA 7 NA
20 8 intake_arm_1 NA NA NA NA NA NA Mitt
21 9 intake_arm_1 NA NA NA NA NA NA Mitt
这就是我的目标(除非我打错了),
id time dat_all ti_all ty_all out_c cma_c c_n t_name
1 1 intake_arm_1 NA NA NA NA NA NA Tom
2 1 v_001_arm_1 NA NA NA NA NA 1 NA
3 2 intake_arm_1 NA NA NA NA NA NA Ricky
4 2 v_001_arm_1 NA NA NA NA NA 5 NA
5 3 intake_arm_1 NA NA NA NA NA NA Ricky
6 3 v_001_arm_1 NA NA NA NA NA 5 NA
7 4 intake_arm_1 NA NA NA NA NA NA Victor
7 4 v_001_arm_1 NA NA NA NA NA NA NA
8 4 v_002_arm_1 NA NA NA NA NA NA NA
9 4 v_003_arm_1 2012-09-23 6 out_ 1 NA 7 NA
10 4 v_004_arm_1 2012-09-23 44 out_ 2 NA 4 NA
11 4 v_005_arm_1 2012-09-02 33 cma_ 2 1 7 NA
12 4 v_006_arm_1 2012-09-10 NA NA 2 1 NA NA
13 4 v_007_arm_1 2012-09-23 22 cma_ 2 2 1 NA
14 4 v_008_arm_1 NA NA NA 2 2 7 NA
15 5 intake_arm_1 NA NA NA NA NA NA Julian
16 5 v_001_arm_1 NA NA NA NA NA 2 NA
17 6 intake_arm_1 NA NA NA NA NA NA Julian
18 6 v_001_arm_1 NA NA NA NA NA 2 NA
19 7 intake_arm_1 NA NA NA NA NA NA Bob
20 7 v_011_arm_1 2012-09-23 65 out_ 1 NA 7 NA
21 7 v_012_arm_1 2012-09-23 NA out_ 1 NA 7 NA
22 7 v_013_arm_1 2012-09-23 10 out_ 2 NA 7 NA
23 7 v_014_arm_1 NA NA NA 2 NA 1 NA
24 8 intake_arm_1 NA NA NA NA NA NA Mitt
25 8 v_001_arm_1 NA NA NA NA NA 4 NA
26 9 intake_arm_1 NA NA NA NA NA NA Mitt
27 9 v_001_arm_1 NA NA NA NA NA 4 NA
ps:我看到人们用 aggregate 和 tapply 做出了惊人的事情。
【问题讨论】:
-
您还没有提供赏金,并且要等到一段时间后才能提供。
-
对这些行“做同样的事情”是什么意思?你的意思是每个ID都会得到一个新行吗?我是否更正了第 11 行是您手动添加的行(如您所说,对于 ID 4?)如果是这样,为什么将其命名为
v_007_arm_1而不是v_006_arm_1? -
你是怎么想出第 11 行的名称
v_007_arm_1(我希望是v_006_arm_1)? -
我明白,但如何以编程方式确定?那就是——你是怎么从数据中得到数字 007 的?
-
@EricFail 如果您不手动将赏金奖励给答案,大卫罗宾逊将只能获得一半的积分!
标签: r dataframe aggregate transformation