I feel a bit embarrassed as I am trying to add two columns in R to get the product.
I have tried
sum(col1,col2) but this returns
Error in Summary.factor(c(49L, 48L, 47L, 46L, 46L, 45L, 45L, 44L, 43L, : sum not meaningful for factors I thought this would very simple! both columns contain integers.
47 Answers
The sum function will add all numbers together to produce a single number, not a vector (well, at least not a vector of length greater than 1).
It looks as though at least one of your columns is a factor. You could convert them into numeric vectors by checking this
head(as.numeric(data$col1)) # make sure this gives you the right output And if that looks right, do
data$col1 <- as.numeric(data$col1) data$col2 <- as.numeric(data$col2) You might have to convert them into characters first. In which case do
data$col1 <- as.numeric(as.character(data$col1)) data$col2 <- as.numeric(as.character(data$col2)) It's hard to tell which you should do without being able to see your data.
Once the columns are numeric, you just have to do
data$col3 <- data$col1 + data$col2 2tablename$column3=rowSums(cbind(tablename$column1,tablename$column2),na.rm=TRUE) This can be used to ignore blank values in the excel sheet.
I have used for Euro stat dataset.
This example works in R:
crime_stat_data$All_theft <-rowSums(cbind(crime_stat_data$Theft,crime_stat_data$Theft_of_a_motorised_land_vehicle, crime_stat_data$Burglary, crime_stat_data$Burglary_of_private_residential_premises), na.rm=TRUE) 1You can use a for loop:
for (i in 1:nrow(df)) { df$col3[i] <- df$col1[i] + df$col2[i] } #Two ways
df$New1 <- df$X1+df$X2+df$X3
#or choosing columns with X
df <-df %>% select(contains('X')) %>% mutate(New2=rowSums(.))
1It could be that one or two of your columns may have a factor in them, or what is more likely is that your columns may be formatted as factors. Please would you give str(col1) and str(col2) a try? That should tell you what format those columns are in.
I am unsure if you're trying to add the rows of a column to produce a new column or simply all of the numbers in both columns to get a single number.
1You can do this :
df <- data.frame("a" = c(1,2,3,4), "b" = c(4,3,2,1), "x_ind" = c(1,0,1,1), "y_ind" = c(0,0,1,1), "z_ind" = c(0,1,1,1) ) df %>% mutate( bi = ifelse((df$x_ind + df$y_ind +df$z_ind)== 3, 1,0 )) Try this for creating a column3 as a sum of column1 + column 2 in a table
tablename$column3=rowSums(cbind(tablename$column1,tablename$column2))