使用 R 合并可能具有或不具有重叠数据的列
consolidate columns that may or may not have overlapping data, using R
假设您有一个如下所示的数据集:
Vietnam Gulf War Iraq War
veteran1 1 0 0
veteran2 0 1 0
veteran3 0 0 1
veteran4 0 1 1 # <---- Note this row
您想合并这些列而不影响数据框中的其他列,如下所示:
Service
veteran1 1
veteran2 2
veteran3 3
veteran4 2 # <---- Note this row
在哪里
1 = Vietnam
、2 = Gulf War
、3 = Iraq War
- 如果一名老将服役过 2 次或更多次,它应该只选择一个(就像
veteran4
的情况一样,它选择了最左边的一列)
- 数据框中还有许多其他列,它们不应受任何影响
问题:
在 R
中你会怎么做?
(注意:如果在其他免费开源程序中更容易做到,请随时分享哪个程序以及您将如何做。这是一个庞大的数据集:300 万行,美国社区调查.)
查看您的数据,这似乎是一个简单的问题:
如果越南 > 0,则使用 1,否则如果海湾 war > 0,则使用 2,否则,如果伊拉克 > 0,则使用 3,否则使用 0
vietnam = c(1, 0, 0,0)
gulfwar = c(0,1,0,1)
iraq = c(0,0,1,1)
df = data.frame(vietnam, gulfwar, iraq)
df$service <- ifelse(df$vietnam > 0,1,ifelse(df$gulfwar>0,2,ifelse(df$iraq>0,3,0)))
df
结果:
vietnam gulfwar iraq service
1 1 0 0 1
2 0 1 0 2
3 0 0 1 3
4 0 1 1 2
可能有点复杂(相对于其他解决方案),但这是一种使用 apply
的方法:
df$service <- apply(df, 1, function(x) which(x == 1)[1] )
df
vietnam gulfwar iraq service
1 1 0 0 1
2 0 1 0 2
3 0 0 1 3
4 0 1 1 2
假设您有一个如下所示的数据集:
Vietnam Gulf War Iraq War
veteran1 1 0 0
veteran2 0 1 0
veteran3 0 0 1
veteran4 0 1 1 # <---- Note this row
您想合并这些列而不影响数据框中的其他列,如下所示:
Service
veteran1 1
veteran2 2
veteran3 3
veteran4 2 # <---- Note this row
在哪里
1 = Vietnam
、2 = Gulf War
、3 = Iraq War
- 如果一名老将服役过 2 次或更多次,它应该只选择一个(就像
veteran4
的情况一样,它选择了最左边的一列) - 数据框中还有许多其他列,它们不应受任何影响
问题:
在 R
中你会怎么做?
(注意:如果在其他免费开源程序中更容易做到,请随时分享哪个程序以及您将如何做。这是一个庞大的数据集:300 万行,美国社区调查.)
查看您的数据,这似乎是一个简单的问题:
如果越南 > 0,则使用 1,否则如果海湾 war > 0,则使用 2,否则,如果伊拉克 > 0,则使用 3,否则使用 0
vietnam = c(1, 0, 0,0)
gulfwar = c(0,1,0,1)
iraq = c(0,0,1,1)
df = data.frame(vietnam, gulfwar, iraq)
df$service <- ifelse(df$vietnam > 0,1,ifelse(df$gulfwar>0,2,ifelse(df$iraq>0,3,0)))
df
结果:
vietnam gulfwar iraq service
1 1 0 0 1
2 0 1 0 2
3 0 0 1 3
4 0 1 1 2
可能有点复杂(相对于其他解决方案),但这是一种使用 apply
的方法:
df$service <- apply(df, 1, function(x) which(x == 1)[1] )
df
vietnam gulfwar iraq service
1 1 0 0 1
2 0 1 0 2
3 0 0 1 3
4 0 1 1 2