Foro de discusión y soporte para usuarios de R

Un foro abierto a todos los temas relacionados con R que quiera.
Nota: Una url estable a este foro es https://knuth.uca.es/R-foro.

Problema R

de Kike Per -


Hola a todos! Tengo un problema con un ejercicio de un curso que estoy haciendo de R. El problema es que el resultado no me da como vector. Espero que me alguien pueda ayudarme.  Abajo os pongo mis operaciones las cuales no me dan.

Gracias


EXERCISE :

A year is a leap year, if it can be divided by 4 but not by 100, except when it is divisible by 400. Create function ans(year1, year2), which returns all the leap years between year1 and year2. For example ans(2000,2010) should return vector c(2000,2004,2008). Number x is divisible by y if and only if the remainder is zero. In R you can use the operator %% to check if a number is exactly divisible by another number. Operator %% will return value 0 if and only if the number is divisible by other number. For example 100%%5 returns value 0 so 100 is divisible by 5. When you are ready input c.


Called from: question()


ans <- function(year1,year2){

 

for(year in year1:year2){

 

if((year %% 4 == 0) & (year %% 100 != 0) | (year  %% 400 == 0)){

 

return(year)

}

next

}

}




Mapas en R

de Alicia Jerez Del Pozo -
Buenos días,


Estoy intentando hacer unos mapas usando la función gvisGeoChart. 

En el código que estoy usando primero pido que me lea los datos de un excel con esta función (dat<-read.xlsx) y después paso a identificar las variables:

pais<- dat[,1]

code <- dat[,2]

export<- dat[,3]

Pero a la hora de hacer el mapa es como que el dato sobre el código me lo da en número en vez de en letra (ya que son códigos ISO  identificando cada pais y son de 2 letras) 

map <- gvisGeoChart(data=data, "pais", "code", "export",

                    options=list(width='500px',heigth='600px',

                                 colors="['#fad7cd','#f3b19e','#d84519']"))

plot(map)


¿Cómo puedo hacer para que no me cambie el formato?



Sumar elementos de las posiciones pares de un vector

de Abelardo Requena Blanco -

Hola, verán estoy empezando con el tema de vectores, el caso es que tengo sumar los elementos de las posiciones pares de un vector, y no se muy bien como hacerlo, se sumar los elementos que son pares o impares, pero no se como puedo hacer que detecte si la posición de ese elemento es par y que luego sume el valor de ese elemento y no la posición, no se si me explico...

Les pongo el ejemplo de lo que estoy haciendo por si se entiende mejor:

#Este es el vector

vector<-c(2, 5, 3, 6, 4, 7, 4, 6, 3, 6, 3, 6, 3, 9, 8, 6)

#Creo esta variable para en ella sumar los elementos

SumaPosPar<-0

#inicio un bucle for, y es donde viene el problema no se como indicar que sume los elementos de las posiciones pares en vez de lo elementos pares en si.

for  (i in vector)

  if (i%%2==0)

    SumaPosPar<- SumaPosPar+ i

print(SumaPosPar)


Muchas gracias por adelantado, saludos

Problema programación

de ruben mesa -

Me gustaría que alguien me ayudara en resolver el problema que tengo con sample en R.

noms <- matrix(nrow = 14, ncol = 5, rep(0,5*14))
noms <- as.data.frame(noms)
names(noms) <- c("Enrique","Marcos","Pablo","Juan","Miguel")
rownames(noms) <- c("Ronda1","Ronda2","Ronda3","Ronda4","Ronda5","Ronda6","Ronda7","Ronda8","Ronda9","Ronda10","Ronda11","Ronda12","Ronda13","Ronda14")
x <- c(1:14)
noms[ ,1] <- sample(x,14, replace = F)
for(i in 1:14){
for(j in 2:5){
    if(j == 2){
        noms[i,j] <- sample(x[x != noms[i,j-1]],1)
    } else if(j == 3){
        noms[i,j] <- sample(x[(x != noms[i,j-1]) && (x != noms[i,j-2])],1)
    } else if(j == 4){
        noms[i,j] <- sample(x[(x != noms[i,j-1]) && (x != noms[i,j-2]) && (x != noms[i,j-3])],1)
    } else if(j == 5){
        noms[i,j] <- sample(x[(x != noms[i,j-1]) && (x != noms[i,j-2]) && (x != noms[i,j-3]) &&  (x != noms[i,j-4])],1)
    }
}}

O añadir esta función :

f <- function(x, z) {
t <- sample(x[x != z],1)
return(t)}

De tal forma que en cada fila no se repita ningun numero y que cada columna contenga del 1:14. Todo aleatorio. También deseo añadir : Si en una fila, por ejemplo, contiene el 1 no puede aparecer el 2. Es decir, si tenemos un numero impar no puede aparecer el numero impar+1.

Muchas gracias de antemano.


Ecuaciones de dos variables

de Felix Elizondo Perez -
Hola buen dia como se resuelven dos ecuaciones de dos variables por ejemplo estas en 6x+17y=1, 9x+23y=4. Es que estoy usando esta :

X<-matrix(c(6,17,9,23),2,2)

X

Y<-c(1,4)

S<-solve(t(X)%*%X)%*%t(X)%*%Y

S


mariam

de Maria Morte -

Hola a todos, 

Soy nueva usando R y tengo unos problema en procesado de datos que quiero hacer en R.

 

Tengo un fichero de datos  en formato texto separado con ; (punto y coma).

Este fichero contiene las columnas:

Poblacion;Sexo;Nota; EdadP, EdadM

Tengo 2 problemas que no se como  tratar.

1.- Problema

La  columna Poblacion debo tenerla  siempre con la primera letra en mayúsculas y  tengo poblaciones  que tiene artículos o prepsosicones entre medias como por ejemplo: ( de, del,, las...)

Albaida del Aljarafe o  Santa Cruz de  Tenerife, tambien tengo algunas con Valencia, valencia, y (blanco)Valencia o Valencia(blanco) 

 

 

NO sé cémo tratar este dato para que solo aparezca en La primera letra  de cada palabra y no los enlace o artículos, es decir no debe aparecer: del o de .

 

2,. Problema

La columna Nota por  hay errores y los datos no todso son de tipo 7.8 o 8.9 

Parece que han errores y tengo algunos  6,5 o 6,9

ES decir han introducido la coma como separador decimal en vez de punto. 

 

Nota podria corregir los errores con otro programa pero quiero hacerlo todo con R.

 

Gracias y espero un pronta respuesta 

Adjunto un troz del fichero

 

 

Un trozo de ejemplo del fichero :

Poblacion;Sexo;Nota;EdadP;EdadM

  Valencia ;m;7.23;45;34

Albaida del Aljarafe;M;5.93;36;37

valencia;M;NA;34;35

Barcelona;M;6.33;37;29

Albalate de las Nogueras;  M;8.93;35;26

  Valencia ;M;7.23;29;44

Santa Cruz de Tenerife;  M   ;NA;26;23

Valencia;M;9.23;44;46

Valencia;  M   ;7.63;23;35

Valencia ;M;5.73;46;31

 Valencia;M;5.03;35;35

Valencia;M;NA;31;-24

Valencia;M   ;6.13;35;28

Albalate de las Nogueras;  M;7.63;24;37

 Valencia;M   ;7.53;28;26

 Valencia;  M;6.33;37;20

Santa Cruz de Tenerife;M;5.33;26;25

Santa cruz de Tenerife;  m;7.33;20;35

 Santa Cruz de tenerife;M;8.23;-25;39

Santa cruz de tenerife;M   ;6.93;35;36


Selección de filas y columnas para calculos

de Florencia Sanchez -

Hola, estoy trabajando con un dataframe con múltiples filas y columnas, se presento el problema de que ciertos datos están mal y se deben multiplicar por 2. Pero esos datos se deben seleccionar por las filas que cumplan determinada condición (en este caso me interesan las filas en la que la columna 2 el dato diga por ejemplo: "habitantes") y las columnas que van desde por ejemplo: 3 a 8.

Es una selección acotada de datos de determinadas filas y determinadas columnas a las cuales debo aplicar la multiplicación.

No se como hacerlo sin tener que crear un dataframe totalmente nuevo y perder los datos de las otras filas, además del orden que ya tiene el archivo original.

Poner etiquetas a outliers en boxplot

de Esther Navarro -

Hola, necesitaria ayuda para ponerle etiquetas a mis boxplot, ya que no lo consigi y no se como hacerlo. Aqui esta mi codigo

install.packages("dplyr")
install.packages("devtools")
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")
library("dplyr")
library("ggpubr")
library("ggplot2")
library("magrittr")
getmode<-function(v) {
  uniqv<-unique(v)
  uniqv[which.max(tabulate(match(v,uniqv)))]
}
my_data <-read_excel("Codeml_dNdS_original.xlsx", sheet = 1)

mean_dNdS<-mean(dNdS)
median_dNdS<-median(dNdS)
mode_dNdS<-getmode(dNdS)

mean_dNdS_Symbio<-mean(dNdS_symbiotics)
median_dNdS_Symbio<-median(dNdS_symbiotics)
mode_dNdS_Symbio<-getmode(dNdS_symbiotics)

mean_dNdS_NSymbio<-mean(dNdS_Nsymbiotics)
median_dNdS_NSymbio<-median(dNdS_Nsymbiotics)
mode_dNdS_NSymbio<-getmode(dNdS_Nsymbiotics)

shapiro.test(dNdS)
shapiro.test(dNdS_Nsymbiotics)
shapiro.test(dNdS_symbiotics)

boxplot(dNdS, dNdS_symbiotics, dNdS_Nsymbiotics,
        main= "Boxplot outliers",
        names = c("dNdS","dNdS_Sym","dNdS_NSym"),
        las= 1,
        col = c("grey","light blue", "pink"),
        border = "black",
        horizontal = FALSE,
        notch = FALSE
        )


Suma de elementos en un vector

de Francisco Narvaez -

Buenas,


Estoy iniciando en  el uso de R y estoy tratando de montar una función haciendo uso de for, if y break. 

La función debe simular el lanzamiento de un dado tantas veces sea necesario hasta que la suma de los lanzamientos sea mayor o igual que 21. 

Lo que hice inicialmente fue crear un vector de 21 datos que generara números aleatorios.

Fue entonces cuando tuve el problema de hacer la suma dato por dato hasta llegar al objetivo de la suma en 21 o más.

Lo ideal es al final mediante “cat” mostrar cuáles fueron los valores de cada lanzamiento.

Nube de palabras en r-studio (Mensaje de error)

de Francisco Narvaez -

Buenos días;

Estoy trabajando en una nube de palabras y suelo usar el r-studio. Estoy trabajando con el siguiente codigo

library(tm)
library(wordcloud)
ejemplo=VCorpus(DirSource("ejemplo",encoding="UTF-8"),readerControl=list(language="spa"))

sin embargo me aparece este error "Error in inherits(x, "Source") : empty directory".

si trabajo en R no tengo problemas y el codigo funciona.

¿Como puedo trabajar esto en r-studio?