Rのデータフレーム内の因子のレベルを示すために、星の文字列を含む列を作成する方法

StackOverflow https://stackoverflow.com/questions/2585583

  •  24-09-2019
  •  | 
  •  

質問

(2番目の質問今日 - 悪い日でなければなりません)。

私は

濃縮カラム(数値)、無効な結果(論理値)と問題(文字)の説明を強調フラグinculding、さまざまな列のデータフレームを有します
df <- structure(list(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), rawconc = c(77.4, 
52.6, 86.5, 44.5, 167, 16.2, 59.3, 123, 1.95, 181), reason = structure(c(NA, 
NA, 2L, NA, NA, NA, 2L, 1L, NA, NA), .Label = c("Fails Acceptance Criteria", 
"Poor Injection"), class = "factor"), flag = c("False", "False", 
"True", "False", "False", "False", "True", "True", "False", "False"
)), .Names = c("x", "rawconc", "reason", "flag"), row.names = c(NA, 
-10L), class = "data.frame")
私は理由欄の数値レベルで列を作成することができます。

df$level<-as.numeric(df$reason)
df
    x rawconc                    reason  flag level
1   1   77.40                      <NA> False    NA
2   2   52.60                      <NA> False    NA
3   3   86.50            Poor Injection  True     2
4   4   44.50                      <NA> False    NA
5   5  167.00                      <NA> False    NA
6   6   16.20                      <NA> False    NA
7   7   59.30            Poor Injection  True     2
8   8  123.00 Fails Acceptance Criteria  True     1
9   9    1.95                      <NA> False    NA
10 10  181.00                      <NA> False    NA

は、ここで私は「レベル」多くの星の列を作成するために何をしたいのですが、それは

失敗します
df$stars<-paste(rep("*",df$level)sep="",collapse="")
Error: unexpected symbol in "df$stars<-paste(rep("*",df$level)sep"

df$stars<-paste(rep("*",df$level),sep="",collapse="")
Error in rep("*", df$level) : invalid 'times' argument

rep("*",df$level)
Error in rep("*", df$level) : invalid 'times' argument

df$stars<-paste(rep("*",pmax(df$level,0,na.rm=TRUE)),sep="",collapse="")
Error in rep("*", pmax(df$level, 0, na.rm = TRUE)) : 
  invalid 'times' argument

担当者のニーズは、一度に1つの値を供給するためにいるようです。私はこれが可能であることを感じて(と私の腸は、「使用lapply」と言うが、FUを適用することは、私のVです。貧しい)

いずれも、試してみたい?

役に立ちましたか?

解決

私はあなたが適用型の機能が必要になると思います。これは動作します:

df[is.na(df$level),"level"] <- 0
df$level <- sapply(df$level, function(x) paste(rep("*",x),collapse=""))
それはリストの代わりにベクトルを返すため、あなたは、このインスタンスでsapplyよりlapplyを使用してよいでしょう。

の担当者のためのヘルプから:

  

「時間」の場合は、単一で構成されてい   整数、結果は、から成り        全体の入力は、この何回も繰り返しました。 「時間」はベクトルの場合        「X」と同じ長さの(「各」によって複製後)、        結果は、 'X [1]' 繰り返し '回数[1]' 回、X '[2]' から構成され        繰り返し '倍[2]' 回というように。

時間パラメータのベクトルでrepを用いた

1つの問題は、単にベクトルを返し、場合回= 0、それがインスタンスを破棄することです。このコマンドでは、これを見ることができます:。rep(rep("*", nrow(df)), times=df$level)

他のヒント

あなたは星のようにベクトルを作成することができます。

vstars <- sapply(1L:nlevels(df$reason), function(i) paste(rep("*",i),collapse=""))
vstars
# [1] "*"  "**"

そして(そのAファクターので動作します)df$reasonでそれをインデックスます:

vstars[df$reason]
# [1] NA   NA   "**" NA   NA   NA   "**" "*"  NA   NA

data.frameについて、各行にpaste次いで、はるかに高速でなければならない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top