R 将多行中的数据合并为一行和一列
我有一个表,其中数据以以下模式存储:R 将多行中的数据合并为一行和一列,r,R,我有一个表,其中数据以以下模式存储: ID Account 1 A 1 B 2 B 3 A 4 A 4 B 我希望通过以下方式获得每个ID的一行: ID Account_A Account_B 1 1 1 2 0 1 3 1 0 4 1 1 0s和1s没有多大关系,可以是As、Bs等。主要问题是每个ID将数据放在一行中,这样我就可以将它与另一个表合并 我对R不太熟悉,因此建议使用没有太多新库的简单解决方案。这
ID Account
1 A
1 B
2 B
3 A
4 A
4 B
我希望通过以下方式获得每个ID的一行:
ID Account_A Account_B
1 1 1
2 0 1
3 1 0
4 1 1
0s和1s没有多大关系,可以是As、Bs等。主要问题是每个ID将数据放在一行中,这样我就可以将它与另一个表合并
我对R不太熟悉,因此建议使用没有太多新库的简单解决方案。这里是一个使用基本R函数
重塑
的解决方案
dat_wide <- reshape(dat, direction = "wide", v.names = "Account", idvar = "ID",
timevar = "Account", sep = "_")
dat_wide
# ID Account_A Account_B
# 1 1 A B
# 3 2 <NA> B
# 4 3 A <NA>
# 5 4 A B
数据:
dat <- data.frame(ID = c(1, 1, 2, 3, 4, 4), Account = c("A", "B", "B", "A", "A", "B"))
这些值可以替换为1
和0
:
dat_wide[-1] <- as.integer(!is.na(dat_wide[-1]))
# ID Account_A Account_B
# 1 1 1 1
# 3 2 0 1
# 4 3 1 0
# 5 4 1 1
dat\u wide[-1]我们需要table()
,然后进行修饰以匹配预期的输出
注意:我正在使用新的示例数据来匹配OP关于重复行的请求
还有一个问题-是否可以将此代码与计数相结合
发生的次数?在另一个数据框中,我有一个类似的布局,
但对于给定的示例,帐户“A”可能会在同一时间出现多次
ID,那么我想得到一个类似的摘要,但是有一个结果
类似于在Excel中使用COUNT()函数
#基于OP注释的新示例数据
你说的桌子是什么意思<代码>数据.表格
或可能数据.框架
或矩阵
?@dvantwisk我的赌注是“CSV,因为我还没有打开R。”库(数据.表格);dcast(表,ID~paste0(“Account”,Account))
library(reforme2)
<代码>dcast(dt,ID~帐户)
应该这样做it@PoG和萨加尔:仅供参考,OP在最后一句中要求以R为基数。还有一个问题-是否可以将此代码与计数发生次数结合起来?在另一个数据框中,我有一个类似的布局,但对于给定的示例,同一ID的帐户“a”可能出现多次,然后我希望得到一个类似的摘要,但其结果类似于在Excel中使用COUNT()函数。
# based on OP comments new example data
df1 <- read.table(text = "ID Account
1 A
1 A
9 B
9 B
3 A
4 A
4 B", header = TRUE)
# get table and convert to a dataframe
myTable <- table(df1)
res <- as.data.frame.matrix(myTable)
res
# A B
# 1 2 0
# 3 1 0
# 4 1 1
# 9 0 2
# update column names for Accounts
colnames(res) <- paste("Account", colnames(res), sep = "_")
# ID is in rownames, add it back as new column
res$ID <- rownames(res)
# reorder columns to get desired output
res <- res[, c(3, 1, 2)]
rownames(res) <- NULL
res
# ID Account_A Account_B
# 1 1 2 0
# 2 3 1 0
# 3 4 1 1
# 4 9 0 2