R:从其他表创建值矩阵

时间:2016-04-06 22:48:48

标签: r if-statement matrix dataframe transfer

我有以下数据框use v5.12; use Path::Tiny "path"; # Used for slurp my $data_string = path("mit.txt")->slurp_utf8; # random filename for data my $data = eval $data_string ; warn $@ if $@; say "Servies:\n ", join(", ", @{ $data->{ data }->{services} }); say "Destinations:\n ", join(", ", @{ $data->{ data }->{destinations} }); say "Sources:\n ", join(", ", @{ $data->{ data }->{sources} }); exit 0; # # Outputs: # Servies: REF_SerTcpTcp5090, REF_SerTcpTcp8200, REF_SerTcpTcp8883, REF_SerTcpTcpudp5090 Destinations: REF_NetworkAny Sources: REF_MHTGIvpkvI ,由table5及其频率组成,使用x从其他数据生成:

counts

我希望以一般方式(即与原始数据框中的其他值一起使用)转移到以下数据框 x freq 1 1 3 2 3 21 3 4 21 4 5 1345 5 7 1

table5if

即。其中数字3,4和5的频率直接传输,所有其他数字在 Frequency 3 21 4 21 5 1345 other 4 中加在一起。我最近的尝试是这样的:

other

此尝试以及使用k <- seq(1, nrow(table5), by=1) ifelse(table5$x[k] == 3, table5if[1] <- table5$freq[k], ifelse(table5$x[k] == 4, table5if[2] <- table5$freq[k], ifelse(table5$x[k] == 5, table5if[3] <- table5$freq[k], table5if[4] <- (table5if[4] + table5$freq[k]) ) ) ) 的其他尝试都产生了某种形式的警告或错误(例如&#34;要替换的项目数量......&#34;和&#34;数量尺寸...&#34;并且没有产生任何令人信服的结果。我已经查看了无数其他问题的错误/警告,并且无法找到我正在寻找的东西 - 那里有很多关于矢量化的内容,但是我无法理解为什么会出现这个问题。任何人都可以为这项小任务提出合适的选择吗?

2 个答案:

答案 0 :(得分:3)

我将按factor(x, levels = 3:5)进行汇总,而所有非现有级别将变为NA。然后,如果您愿意,可以将其更改为"other"。在这种情况下data.table很方便,因为它会使NA成为一个单独的组而不是省略它们

library(data.table)
setDT(df)[, .(Frequency = sum(freq)), by = factor(x, levels = 3:5)]
#    factor Frequency
# 1:     NA         4
# 2:      3        21
# 3:      4        21
# 4:      5      1345

答案 1 :(得分:0)

base R选项是根据&#39; x&#39;的值创建逻辑索引。 %in%列。我们得到了sum&#39; freq&#39;基于&#39; i1&#39;的否定索引和rbind以及&#39; table5&#39;。

的子集行
i1 <- table5$x %in% 3:5
`row.names<-`(rbind(table5[i1,], list(x= "Other", 
          freq=sum(table5[!i1,"freq"]))), NULL)
#      x freq
#1     3   21
#2     4   21
#3     5 1345
#4 Other    4