1

リストがあります:

xxx

[[1]]
[1] 1899   99   99   97   97   97   97   97

[[2]]
[1] 86 86 86 86 86 86 86

[[3]]
 [1] 1897   97   97   97   97   97   97   97   97   97

[[4]]
[1] 3 3 3 3

[[5]]
 [1] 1883   83   83   83   83   83   83   83   83   83

Dput:

list(c(1899L, 99L, 99L, 97L, 97L, 97L, 97L, 97L), c(86L, 86L, 
86L, 86L, 86L, 86L, 86L), c(1897L, 97L, 97L, 97L, 97L, 97L, 97L, 
97L, 97L, 97L), c(3L, 3L, 3L, 3L), c(1883L, 83L, 83L, 83L, 83L, 
83L, 83L, 83L, 83L, 83L))

次に、各リスト要素で最も頻度の高い値を選択し、その値をリスト要素の長さだけ繰り返します。

xxxh=lapply(xxx,function(x) {

  a=max(rle(sort(x))[[1]])

  b=rle(sort(x))[[2]][which(rle(sort(x))[[1]]==a)]

  hh=rep(b,length(x))

  return(hh)

})

警告が表示されます"In max(rle(sort(x))[[1]]) : no non-missing arguments to max; returning -Inf"

結果は

xxxh
[[1]]
[1] 97 97 97 97 97 97 97 97

[[2]]
[1] 86 86 86 86 86 86 86

[[3]]
 [1] 97 97 97 97 97 97 97 97 97 97

[[4]]
[1] 3 3 3 3

[[5]]
 [1] 83 83 83 83 83 83 83 83 83 83

次に、各リスト要素の最初の要素のいずれかまたはに応じて、paste上記のリスト要素の値を試します。18190nchar

xxxm=lapply(xxxh,function(x) {

  kk=x[1]


  if(nchar(kk==0)) {   kk<-0 }

  else {

  if (nchar(kk)==1) {as.numeric(paste(190,kk,sep=""))} else {

  if (nchar(kk)==2) as.numeric(paste(18,kk,sep=""))}}

}

    )

しかし、私は得るだけですzeros...

xxxm
[[1]]
[1] 0

[[2]]
[1] 0

[[3]]
[1] 0

[[4]]
[1] 0

[[5]]
[1] 0

私は取得したい:

xxxm
[[1]]
[1] 1897

[[2]]
[1] 1896

[[3]]
[1] 1897

[[4]]
[1] 1903

[[5]]
[1] 1883

私は何を間違っていますか?:(

よろしくお願いします!

4

3 に答える 3

4

プロセスを 2 行に大幅に簡素化できます。

モードを取得するには、およびとともに使用lapplyします。( R 言語モードではなく、統計モード) 次に、値が 10 未満の場合の条件を使用して、それに応じて貼り付けます。tablewhich.max
ifelse

# find the most frequent value, using `table` & `which.max` 
mode.mylist <- lapply(mylist, function(x) names(which.max(table(x))))

# paste values as needed.  No need to count characters. Instead check if the value is less than 10. (R coerces to numeric)
ifelse(mode.mylist < 10, paste0("190", mode.mylist), paste0("18", mode.mylist))

[1] "1897" "1886" "1897" "1903" "1883"


mylistスターティング リストはどこですか。たとえば、次のとおりです。

mylist <- list(c(1899L, 99L, 99L, 97L, 97L, 97L, 97L, 97L), c(86L, 86L, 86L, 86L, 86L, 86L, 86L), c(1897L, 97L, 97L, 97L, 97L, 97L, 97L, 97L, 97L, 97L), c(3L, 3L, 3L, 3L), c(1883L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L, 83L))
于 2013-07-02T13:22:17.033 に答える
3

あなたの最初のif(nchar(kk==0))はずですif(nchar(kk)==0)

于 2013-07-02T13:18:39.047 に答える