iT邦幫忙

0

R的迴圈問題

  • 分享至 

  • xImage

各位好,最近開始才接觸R,想請問一個問題:
df=scan(file="D:/download/data.txt")
df (這是一筆50個值的資料)
https://ithelp.ithome.com.tw/upload/images/20221005/20153553ACVE7i8N6d.png

x=df[1:50]
y=ifelse(x<=0.2,1,0)
F=sum(y)
F
這是將50筆資料,若小於等於0.2,定義為1;大於0.2定義為0的code,再加起來為10,到這裡沒問題
但我想用個迴圈,一次跑0.2、0.4、0.6、0.8、1.0,所以我弄出了這個
for (t in c(0.2,0.4,0.6,0.8,1.0)){
y=ifelse(x<=t,1,0)
}
sum(y)
而它顯示為35,意思是他只有加t=1.0的部分,
請問有沒有一個方法,可以一次跑出5個sum(t<=0.2 0.4 ... 1.0)?
謝謝大家

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-10-05 21:12:35
最佳解答

試試看

for (t in c(0.2,0.4,0.6,0.8,1.0)){
y=ifelse(x<=t,1,0)
sum(y)
}
l960908 iT邦新手 5 級 ‧ 2022-10-06 19:58:33 檢舉

感謝提醒~

for (t in c(0.2,0.4,0.6,0.8,1.0)){
y=ifelse(x<=t,1,0)
print(sum(y))
}
這樣就沒問題了

0
obarisk
iT邦研究生 1 級 ‧ 2022-10-06 15:30:03
threads <- seq(0.2, 1, 0.2)
output <- lapply(threads, function(t, d) sum(d <= t), d = df)
names(output) <- threads
output
看更多先前的回應...收起先前的回應...
obarisk iT邦研究生 1 級 ‧ 2022-10-06 15:31:04 檢舉

在這裡不需要 ifelse, 因為加總 TRUE/FALSE 就可以了

l960908 iT邦新手 5 級 ‧ 2022-10-06 19:59:55 檢舉

謝謝~
我選樓上是最佳解答,因為他是用我的改的
希望您別介意,這個讓我學到更多

obarisk iT邦研究生 1 級 ‧ 2022-10-07 22:09:15 檢舉

沒關係啊。apply系列不是很重要。
倒是 ifelse 那裡記得改一下

l960908 iT邦新手 5 級 ‧ 2022-10-07 23:51:59 檢舉

加總 TRUE/FALSE 就可以了
這句話我不是很懂,

請問您的是說,ifelse不要?改用sum就好?

我要發表回答

立即登入回答