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