如果表格不存在,请填写表格

时间:2018-03-31 07:05:03

标签: r if-statement

我遇到了以下难题。这是我数据的简短示例。假设我有两个数据集(我的实例有大约20个)。数据帧作为由具有lapply的自写函数计算的列表产生。所以,我也把数据框放在我的例子中。然后我“rbind”他们计算一个频率表。

df1 <- data.frame(rev(seq(12:0)), paste0("a=",sample(0:12, 13, replace=T)))
colnames(df1) <- c("k", "a")
df2 <- data.frame(rev(seq(12:0)), paste0("a=",sample(0:12, 13, replace=T)))
colnames(df2) <- c("k", "a")
list_df <- list(df1,df2)
df_combine<- plyr::ldply(list_df, rbind)
freq_foo <- table(df_combine$k,df_combine$a)

我得到以下表格的频率表。

    a=0 a=11 a=12 a=2 a=5 a=6 a=7 a=8 a=3 a=9
 1    1    0    0   0   0   0   0   1   0   0
 2    1    0    0   0   0   0   0   0   0   1
 3    1    0    0   0   0   1   0   0   0   0
 4    0    0    0   1   0   1   0   0   0   0
 5    0    0    0   1   1   0   0   0   0   0
 6    0    0    0   0   0   0   1   0   0   1
 7    0    1    1   0   0   0   0   0   0   0
 8    1    0    0   0   0   1   0   0   0   0
 9    0    0    0   0   0   0   2   0   0   0
 10   0    0    1   0   1   0   0   0   0   0
 11   1    1    0   0   0   0   0   0   0   0
 12   0    0    0   0   0   0   1   0   1   0
 13   1    0    1   0   0   0   0   0   0   0

我想以下列方式扩展和操作我的表: 首先,该表应该超出a=0a=15的范围。因此,如果缺少列,则应添加该列。第二)我想订购从0到15的列。 对于我试过的第一个问题

if(freq_foo$paste0("a=",0:15) == F){freq_foo$paste("a=",0:15) <- 0}

但这应该仅适用于数据框而不适用于表。也。我不知道如何按升序订购列。数据类型对我来说并不重要,因为我只想使用输出进行进一步的计算。因此,它也可以是数据框而不是表。

1 个答案:

答案 0 :(得分:0)

希望这有帮助!

#convert freq_foo table to dataframe    
df <- as.data.frame.matrix(freq_foo)

#add all zeros column for missing column name in 0:15 series
df[, paste0("a=", c(0:15)[!(c(0:15) %in% as.numeric(gsub(".*=(\\d+)", "\\1", names(df))))])] <- 0

#order columns from 0 to 15 
df <- df[, order(as.numeric(gsub(".*=(\\d+)", "\\1", names(df))))]

输出为:

   a=0 a=1 a=2 a=3 a=4 a=5 a=6 a=7 a=8 a=9 a=10 a=11 a=12 a=13 a=14 a=15
1    0   0   0   0   0   0   0   0   0   1    1    0    0    0    0    0
2    0   0   0   1   0   0   0   0   0   0    1    0    0    0    0    0
3    0   0   0   0   1   0   0   1   0   0    0    0    0    0    0    0
4    0   0   0   0   0   0   0   0   2   0    0    0    0    0    0    0
5    0   1   0   0   0   0   1   0   0   0    0    0    0    0    0    0
6    1   0   0   0   0   0   0   0   0   1    0    0    0    0    0    0
7    0   1   0   0   0   0   0   0   0   0    0    1    0    0    0    0
8    0   0   0   0   0   0   0   1   1   0    0    0    0    0    0    0
9    0   0   0   0   0   0   0   1   1   0    0    0    0    0    0    0
10   1   0   0   0   0   0   0   0   0   1    0    0    0    0    0    0
11   1   0   0   0   0   0   0   0   0   0    1    0    0    0    0    0
12   0   0   0   0   0   0   0   0   1   0    0    0    1    0    0    0
13   0   1   0   0   1   0   0   0   0   0    0    0    0    0    0    0

(编辑:从OP获得要求澄清后更新的代码)