【发布时间】:2015-07-11 08:52:11
【问题描述】:
我正在寻找一种方法,在合并数据帧后,将具有不同 x 和 y 后缀的相同变量名的值加入一列。例如:'name.x' 和 'name.y' 将合并到一个名为 'name' 的列中,其中 'name.x' 值将取代 'name.y' 值,除非 'name.x' 没有值,在这种情况下将使用“name.y”。我希望对数据框中所有带后缀的列执行此操作。
这是我正在寻找的示例:
df <- data.frame(ID=c(1,2,3,4,5), variable1.x=c('5.0',"",'7.9','NA','12'), variable1.y=c('1.5','3.0',"",'8.9','3.9') );
ID variable1.x variable1.y
1 5.0 1.5
2 3.0
3 7.9
4 NA 8.9
5 12 3.9
预期输出:
ID variable1
1 5.0
2 3.0
3 7.9
4 8.9
5 12
我的数据示例如下:
structure(list(cikcode = c(20, 20, 20, 20, 20, 20, 20, 20, 20,
20), yearendeddate = structure(c(3L, 3L, 1L, 1L, 2L, 2L, 4L,
4L, 5L, 5L), .Label = c("2000-12-30", "2001-12-29", "2002-12-28",
"2004-01-03", "2005-01-01"), class = "factor"), source = structure(c(1L,
3L, 1L, 3L, 2L, 3L, 1L, 3L, 1L, 3L), .Label = c("10-K", "10-K405",
"DEF 14A"), class = "factor"), sourcedate = structure(c(5L, 6L,
1L, 2L, 3L, 4L, 7L, 8L, 9L, 10L), .Label = c("2001-03-26", "2001-03-28",
"2002-03-20", "2002-03-25", "2003-03-27", "2003-03-31", "2004-04-01",
"2004-04-06", "2005-03-31", "2005-04-04"), class = "factor"),
financialsdate = structure(c(3L, 3L, 1L, 1L, 2L, 2L, 4L,
4L, 5L, 5L), .Label = c("2000-12-30", "2001-12-29", "2002-12-28",
"2004-01-03", "2005-01-01"), class = "factor"), ticker.x = structure(c(1L,
NA, 1L, NA, 1L, NA, 1L, NA, 1L, NA), .Label = "", class = "factor"),
statecode.x = structure(c(1L, NA, 1L, NA, 1L, NA, 1L, NA,
1L, NA), .Label = "NJ", class = "factor"), statename.x = structure(c(1L,
NA, 1L, NA, 1L, NA, 1L, NA, 1L, NA), .Label = "NEW JERSEY", class = "factor"),
siccode.x = c(3823, NA, 3823, NA, 3823, NA, 3823, NA, 3823,
NA), naicscode.x = c(334513, NA, 334513, NA, 334513, NA,
334513, NA, 334513, NA), auditor.x = structure(c(3L, NA,
1L, NA, 1L, NA, 2L, NA, 2L, NA), .Label = c("Arthur Andersen LLP",
"Grant Thornton LLP", "KPMG LLP"), class = "factor"), auditfees.x = structure(c(5L,
NA, 3L, NA, 1L, NA, 4L, NA, 2L, NA), .Label = c("185,000",
"225,000", "200,000", "137,100", "123,700"), class = "factor"),
revenue.x = structure(c(3L, NA, 1L, NA, 4L, NA, 5L, NA, 2L,
NA), .Label = c("84,912,000", "112,494,000", "68,231,000",
"71,819,000", "94,676,000"), class = "factor"), earnings.x = structure(c(3L,
NA, 4L, NA, 2L, NA, 1L, NA, 1L, NA), .Label = c("", "1,048,000",
"3,284,000", "5,838,000"), class = "factor"), assets.x = structure(c(2L,
NA, 3L, NA, 1L, NA, 4L, NA, 5L, NA), .Label = c("47,644,000",
"50,459,000", "54,421,000", "83,081,000", "93,016,000"), class = "factor"),
ticker.y = c(NA, "", NA, "", NA, "", NA, "", NA, ""), statecode.y = c(NA,
"NJ", NA, "NJ", NA, "NJ", NA, "NJ", NA, "NJ"), statename.y = c(NA,
"NEW JERSEY", NA, "NEW JERSEY", NA, "NEW JERSEY", NA, "NEW JERSEY",
NA, "NEW JERSEY"), siccode.y = c(NA, 3823, NA, 3823, NA,
3823, NA, 3823, NA, 3823), naicscode.y = c(NA, "334513",
NA, "334513", NA, "334513", NA, "334513", NA, "334513"),
auditor.y = c(NA, "KPMG LLP", NA, "Arthur Andersen LLP",
NA, "Arthur Andersen LLP", NA, "Grant Thornton LLP", NA,
"Grant Thornton LLP"), auditfees.y = c(NA, "123,700", NA,
"200,000", NA, "185,000", NA, "137,100", NA, "225,000"),
revenue.y = c(NA, "68,231,000", NA, "84,912,000", NA, "71,819,000",
NA, "94,676,000", NA, "112,494,000"), earnings.y = c(NA,
"3,284,000", NA, "5,838,000", NA, "1,048,000", NA, "", NA,
""), assets.y = c(NA, "50,459,000", NA, "54,421,000", NA,
"47,644,000", NA, "83,081,000", NA, "93,016,000")), .Names = c("cikcode",
"yearendeddate", "source", "sourcedate", "financialsdate", "ticker.x",
"statecode.x", "statename.x", "siccode.x", "naicscode.x", "auditor.x",
"auditfees.x", "revenue.x", "earnings.x", "assets.x", "ticker.y",
"statecode.y", "statename.y", "siccode.y", "naicscode.y", "auditor.y",
"auditfees.y", "revenue.y", "earnings.y", "assets.y"), row.names = c(NA,
10L), class = "data.frame")
【问题讨论】:
-
嘿akrun,刚刚添加的示例
-
看起来您现在在线。对更新有任何反馈吗?
-
我一直在尝试将 3 个变量转换为字符、因子或数字,但没有任何效果。在转换了前面的 6 个变量之后,R 对我来说只是冻结了。这令人沮丧。
-
好的,我又运行了一次。它仍然给我选择的未定义列和强制引入的 NA 的相同错误
-
虽然你的 dput 输出我没有收到任何错误。