2013-11-20 16 views
5

Tôi đang tìm hàm chỉ báo trong R, tức là hàm trả về 1, nếu giá trị của phần tử trong vectơ lớn hơn 0 và trả về 0, nếu giá trị của phần tử trong một vectơ nhỏ hơn 0.Chức năng chỉ báo trong R

Tôi cần sử dụng chức năng này trên tất cả các phần tử trong vectơ trả về một véc-tơ mới chỉ với số 0 và số nguyên.

Cảm ơn.

+0

điều gì sai với toán tử '>' bình thường? –

+1

'as.numeric (x> 0)' sẽ hoạt động. –

Trả lời

4

Nếu tôi có thể hiểu chính xác bạn thì bạn muốn thay đổi toàn bộ khung dữ liệu, giả sử tôi có thể đề nghị bạn sử dụng áp dụng như dưới đây, trong đó df là khung dữ liệu của bạn.

apply(df,2,function(x)ifelse((x>0),1,0)) 

Bạn cũng có thể sử dụng nếu nó cho chỉ có một vector một cái gì đó như dưới đây:

x <- c(-2,3,1,0) 
y <- ifelse(x>0,1,0) 
print(y) 
[1] 0 1 1 0 #Output 

Hope this helps

+0

Siêu mát mẻ; cảm ơn bạn! –

6

Có rất nhiều cách khác nhau, các tối thiểu tổ hợp phím một:

Ivec <- 0+(vec>0) 

Lưu một vài tổ hợp phím qua: as.numeric(vec>0). Tôi đoán rằng ifelse(x>0,1,0) -approach sẽ hơi chậm hơn nếu được áp dụng cho một vectơ lớn hoặc nếu được sử dụng trong các mô phỏng. cũng có thể sử dụng:

Ivec <- 1*(vec>0) 
+0

Wow, + 1, tôi đã biết rằng 0+ lừa, tuyệt vời – PKumar

1

Các I hàm trong R, được gọi là ức chế Giải thích/chuyển đổi các đối tượng hoạt động, có thể được sử dụng cho mục đích này. Ví dụ, dòng dưới đây trả về giá trị cho các chức năng I (x < 4) trong đó X = {0, 1, 2, 3, 4, 5}:

> I(0:5 < 4) 
[1] TRUE TRUE TRUE TRUE FALSE FALSE 

Trong R TRUEFALSE thể được điều trị như 1 và 0, nhưng nếu bạn nhấn mạnh vào đầu ra của bạn chính xác những con số đó, chỉ cần bọc hàm I của bạn vào as.numeric.

+1

Tại sao bạn đã sử dụng chức năng Asis ... không sử dụng nó trả về cùng một đối tượng ('0: 5 <4'). Khi bạn sử dụng nó, đối tượng được trả về giờ là lớp 'AsIs' (có thể tạo ra hậu quả không mong muốn) – user20650

0

Ngoài ra còn có một chức năng chỉ số tích hợp sẵn trong R

Chỉ số (x, min, max)

-INF và Inf vẫn là những giá trị hợp lệ.

Các vấn đề liên quan