Buenas noches Mariana,
Asumiendo que los datos que tienes son los siguientes:
datos <- structure(list(Estabilidad = structure(1:7, .Label =
c("a", "b",
"c", "d", "e", "f", "g"),
class = "factor"), A = c(213, 440.8,
1.94, 9.27, 459.7, 2.094, -9.6), B = c(156, 106.6, 1.15, 3.3,
108.2, 1.098, 2), C = c(104, 61, 0.91, 0, 61, 0.911, 0), D = c(68,
33.2, 0.73, -1.7, 44.5, 0.516, -13), E = c(51, 22.8, 0.68, -1.3,
55.4, 0.305, -34), F = c(34, 14.4, 0.74, -0.35, 65.6, 0.18, -48.6
)), .Names = c("Estabilidad", "A", "B",
"C", "D", "E", "F"), row.names c(NA,
-7L), class = "data.frame")
y que las distancias x<1 km y x>1km de "datos" corresponden a
las columnas
A, B, C y D, E, F,
respectivamente, es decir, las distancias están dadas por
x <- rep(c(''<1km'', ''>1km''),c(3,3))
x
entonces, la función:
# Función para seleccionar las entradas de m (un data.frame) utilizando
# valores de la distancia x y la estabilidad
f <- function(distancia, estabilidad, m = datos){
colInd <- with(m[,-1], x %in% distancia)
m2 <- m[,-1][,colInd]
Ind <- colnames(m2) %in% estabilidad
res <- m2[, Ind]
names(res) <- m[,1]
rm(colInd, m2, Ind)
res
}
cuyos argumentos son el valor de la distancia que quieres "filtrar" y
el
valor de estabilidad
que requieres.
Básicamente lo que hace es lo siguiente (linea por linea):
Linea 1. colInd contiene TRUE / FALSE y almacena las columnas de m
correspondientes a
valores de distancia < o > a 1 km. Esto lo hace utilizando el vector x
definido con
anterioridad.
Linea 2. Crea una copia de los datos m sin la primera columna (sin
Estabilidad) y selecciona
del conjunto de datos resultante, solo las columnas que cumplan el criterio
definido en Linea 1.
Linea 3. Determina las columnas de m2 que cumplen con el valor de
estabilidad proporcionado
como argumento en la función.
Linea 4. Selecciona las columnas de m2 definidas en Linea 3 y lo almacena en
un objeto de
nombre res.
Linea 5. Nombra el vector res utilizando la columna Estabilidad de los datos
originales m.
Linea 6. Remueve objetos innecesarios.
Linea 7. Entrega el objeto res.
# Ejemplo: distancias <1 km, seleccionado la columna B
f(''<1km'', ''B'')
# a b c d e f g
# 156.000 106.600 1.150 3.300 108.200 1.098 2.000
Espero sea de utilidad,
Jorge Ivan Velez
2009/7/3 mariana martinez <mariana.martinezs@hotmail.com>
>
>
>
> Hola que tal alguien de ustedes me podría auxiliar, lo que pasa es que
> estoy tratando de hacer un programa en R utilizando la siguiente tabla:
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> x<1 km
> x>1km
>
> Estabilidad
> a
> c
> d
> f
> c
> d
> f
>
> A
> 213
> 440.8
> 1.94
> 9.27
> 459.70
> 2.094
> -9.6
>
> B
> 156
> 106.6
> 1.15
> 3.30
> 108.20
> 1.098
> 2.0
>
> C
> 104
> 61.0
> 0.91
> 0.00
> 61.00
> 0.911
> 0.0
>
> D
> 68
> 33.2
> 0.73
> -1.70
> 44.50
> 0.516
> -13.0
>
> E
> 51
> 22.8
> 0.68
> -1.30
> 55.40
> 0.305
> -34.0
>
> F
> 34
> 14.4
> 0.74
> -0.35
> 65.60
> 0.180
> -48.6
>
>
>
> Lo que quisiera que mi programa realizara es, que al yo darle una distancia
> (x) < 1.0 km ó (x)> 1.0km y proporcionarle la
estabilidad(A,B,C,D,E,F) me de
> el coeficiente de a, c, d, y f, pero no se por donde empezar,
>
>
>
> Lo que se encuentra en la parte de abajo lo realice para la siguiente
> tabla:
>
>
>
> Pero no se si tengo que hacer lo mismo para la tabla de arriba.
>
>
>
>
>
>
>
>
> Tabla 4-1
>
>
> Dia
>
> Noche
>
>
>
>
>
>
>
>
>
>
>
> Fuerte
>
> Moderado
>
> Ligero
>
> Nublado
>
> Claro
>
>
> Clase (a)
>
> 1
>
> 2
>
> 3
>
> 4
>
> 5
>
>
> <2
>
> A
>
> A-B
>
> B
>
> E
>
> F
>
>
> 2-3
>
> A-B
>
> B
>
> C
>
> E
>
> F
>
>
> 3-5
>
> B
>
> B-C
>
> C
>
> D
>
> E
>
>
> 5-6
>
> C
>
> C-D
>
> D
>
> D
>
> D
>
>
> >6
>
> C
>
> D
>
> D
>
> D
>
> D
>
>
>
> clasatm<- function(nivel, velviento)
>
> {
>
> if (velviento < 2) {
> {
> switch(nivel,
> fuerte = "A",
> moderado = "B",
> leve = "B",
> nubes= "E",
> claro = "F" )
> }
>
> }
>
> else
>
> if ((velviento >= 2)&(velviento<3)) {
> {
> switch(nivel,
> fuerte = "B",
> moderado = "B",
> leve = "C",
> nubes = "E",
> claro = "F" )
> }
> }
>
> else
>
> if ((velviento >= 3)&(velviento<5)) {
> {
> switch(nivel,
> fuerte = "B",
> moderado = "C",
> leve = "C",
> nubes = "D",
> claro = "E" )
> }
> }
>
> else
>
> if ((velviento >= 5)&(velviento<6)) {
> {
> switch(nivel,
> fuerte = "C",
> moderado = "D",
> leve = "D",
> nubes = "D",
> claro = "D" )
> }
> }
> else
>
> if (velviento >= 6) {
> {
> switch(nivel,
> fuerte = "C",
> moderado = "D",
> leve = "D",
> nubes = "D",
> claro = "D" )
> }
> }
>
>
> }
>
>
>
> clasatm("leve", 1.5)
>
>
>
> Saludos
>
> Mariana Martínez Sánchez
>
>
> _________________________________________________________________
> [[elided Hotmail spam]]
>
> [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>
[[alternative HTML version deleted]]