2017-08-28 33 views
0

我想要爲列表中的所有列表查找給定分位數的索引。然而,包含單個項目的列表最終包含百分比字符串(「.5%」),而具有多個項目的列表則不包含。避免使用單個項目的列表的百分比字符串(「.5%」)

這會導致出現問題,因爲我期望它們被同樣命名。我如何確保沒有列表項包含百分比字符串?

df = data.frame(a=c(1, 2, 2, 2), b=c(2, 3, 4, 5)) 
tmp = aggregate(b ~ a, df, c) 
sapply(tmp$b, function(x) which.min(abs(x - quantile(x, .05)))) 

1.5% 2 
    1 1 
+2

這是由於的R基本的數學運算處理名的方式('+','-'等)。通常,如果不需要回收,名稱將被保留。你可以從'x <-setNames(5,「a」); print(x + 2); print(x + 1:3)''看到它。然而,在這裏,你可以使用'unname':'sapply(tmp $ b,function(x)unname(which.min(abs(x - quantile(x,.05)))))'。 – nicola

+0

@nicola:'unname'有效。您可以將其作爲建議的答案發布! – forthrin

回答

1

使用purrr函數map_dbl,.5%似乎消失。 點擊此處詳細瞭解地圖功能http://purrr.tidyverse.org/reference/index.html

library(purrr) 
df = data.frame(a=c(1, 2, 2, 2), b=c(2, 3, 4, 5)) 
tmp = aggregate(b ~ a, df, c) 
map_dbl(tmp$b, function(x) which.min(abs(x - quantile(x, .05)))) 

1 2 
1 1 
+0

很高興知道以後! – forthrin