我有一张如下表格。(Table1)
Table1:
Type Fund Con_counts
5510 COM 1
5520 COM 2
0300 COM 2
5510 COM 1
.
并使用以下
Table1 <- Table1[, list(Con_counts = sum(as.double(Con_counts), na.rm = TRUE)), by = list(Type, Fund)]
如何使用代码使用逗号(,)分隔列名,以便我可以放在()括号内。
例如,我尝试了下面的代码并且不起作用。
columns <- colnames(Table2)[!(names(Table2) %in% c("Con_counts"))]
Table1[, list(Con_counts = sum(as.double(Con_counts), na.rm = TRUE)), by = list(columns)]
列应为Type,Fund
Output:
Type Fund Con_counts
5510 COM 2
5520 COM 2
0300 COM 2
答案 0 :(得分:1)
我确信此答案之前已被提出,但我没有找到好的副本。
我将使用data.table
函数setdiff()
语法执行此操作:
columns <- setdiff(names(Table1), c("Con_counts"))
Table1[, .(Con_counts = sum(as.double(Con_counts), na.rm = TRUE)), by = columns]
Type Fund Con_counts 1: 5510 COM 2 2: 5520 COM 2 3: 300 COM 2
library(data.table)
Table1 <- fread(
" Type Fund Con_counts
5510 COM 1
5520 COM 2
0300 COM 2
5510 COM 1")
答案 1 :(得分:0)
以下是dplyr
中的简单解决方案:
library(dplyr)
Table1 <- data.frame(Type = c(5510,5520,0300,5510),
Fund = c('COM','COM','COM','COM'),
Con_counts = c(1,2,2,1))
Table1 %>%
group_by(Type,Fund) %>%
summarise(Con_counts = sum(Con_counts)) %>%
Type Fund Con_counts
<dbl> <fct> <dbl>
1 300. COM 2.
2 5510. COM 2.
3 5520. COM 2.
如果您仍想使用data.tables
,我无法帮助您,但下面的答案可以帮助您获取列名:
要获取Table1
的列名,只需使用返回字符向量的colnames(Table1)
即可。
columns <- colnames(Table1)
columns
[1] 'Type' 'Fund' 'Con_counts'
如果要从该列表中删除“Con_counts”,可以选择以下几种方法:
# If you know that 'Con_counts' is the 3rd column,
# you can call colnames on a sliced version of the data frame
colnames(Table1[,-3])
[1] 'Type' 'Fund'
colnames(Table1[,c(-2,-3)])
[1] 'Type'
# If you want to drop by name
columns <- colnames(Table1)
columns[columns != 'Con_counts']
[1] 'Type' 'Fund'
# If you want to drop by multiple names
columns[!(columns %in% c('Con_counts', 'Type'))]
[1] 'Fund'
您可以通过将该变量插入括号表示法来选择这些列。
Table[1, columns]
# Type Fund Con_counts
# 5510 COM 1